上海市计算机学会竞赛平台2022年11月月赛乙组 总结

https://iai.sh.cn/contest/44
3h.
第一次提交:320pts。比赛结束前:400pts。

比赛期间 第一次提交

先把四道题都读了一遍,感觉这次比较简单。顺着做吧。
此时3min

T1 数对统计

在这里插入图片描述

贪心 - AC

数对(x,y),x已知,选等于x的数中最左边的那个,数y。

此时10min

int n, a[MAXN], pos[MAXN];
ll cnt, ans;
bool vh[MAXN];

int main() {
   
//	ios::sync_with_stdio(false);
//	cin.tie(nullptr); cout.tie(nullptr);

	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) {
   
		scanf("%d", a + i);
		if (!pos[a[i]]) pos[a[i]] = i;
	}
	
	for (int i = n; i; --i) {
   
		if (i == pos[a[i]]) ans += cnt;
		if (!vh[a[i]]) ++cnt;
		vh[a[i]] = true;
	}
	printf("%lld\n", ans);
	
	return 0;
}

T2 序列操作

在这里插入图片描述

暴力之前

以前好像做过,但是完全忘了。

诚然,线段树可做。但是,对这个单点加法,全部乘法来说,有点大材小用了。


对于某个位置的数,它等于 m 3 ( m 2 ( m 1 x + q 1 ) + q 2 ) + q 3 m_3(m_2(m_1x+q_1)+q_2)+q_3 m3(m2(m1x+q1)+q2)+q3,这里只是举个例子。对于不同的数,几个m和q是不同的。
借鉴懒标记。我想,是不是要弄个乘法懒标记?但是在一个数上做加法,要修改整个懒标记,别的数不变,不好做。
我接着想到把它变成 m 1 m 2 m 3 ( m 1 − 1 ( m 2 − 1 ( m 3 − 1 q 3 + q 2 ) + q 1 ) + x ) m_1m_2m_3(m_1^{-1}(m_2^{-1}(m_3^{-1}q_3+q_2)+q_1)+x) m1m2m3(m11(m21(m31q3+q

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值