社区讨论

90分MLE救我

P1198[JSOI2008] 最大数参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mi6odmc7
此快照首次捕获于
2025/11/20 08:10
4 个月前
此快照最后确认于
2025/11/20 08:10
4 个月前
查看原帖
CPP
#pragma g++ optimize(2)
#include <bits/stdc++.h>

using namespace std;

namespace program {
	typedef long long big;
	char flag;
	const int MAXN = 200000;
	#define lt(k)  (k << 1)
	#define rt(k)  (lt(k) | 1)
	big Sum[MAXN << 2], n, Mod;
	big len = 0;
	big t = 0;
	
	void updata(big l, big r, big pos, big val, big k) {
		if (l == r)
			Sum[k] = val;
		else {
			big mid = (l + r) >> 1;
			if (mid >= pos)
				updata(l, mid, pos, val, lt(k));
			if (mid < pos)
				updata(mid + 1, r, pos, val, rt(k));
			Sum[k] = max(Sum[lt(k)], Sum[rt(k)]);
		}
	}
	
	big query(big l, big r, big x, big y, big k) {
		big tot = 0;
		if (x <= l && r <= y)
			return Sum[k];
		big mid = (l + r) >> 1;
		if (mid >= x)
			tot = max(tot, query(l, mid, x, y, lt(k)));
		if (mid < y)
			tot = max(tot, query(mid + 1, r, x, y, rt(k)));
		return tot;
	}
	
	void work() {
		cin >> n >> Mod;
		for (big i = 1; i <= n; i++) {
			big x;
			cin >> flag >> x;
			if (flag == 'Q')
				cout << (t = query(1, n, len - x + 1, len, 1)) << '\n';
			else {
				len += 1;
				updata(1, n, len, (x + t) % Mod, 1);
			}
		}
	}
}

int main() {
	program::work();
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...