社区讨论
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 条回复,欢迎继续交流。
正在加载回复...