其他点都过了,就只有最后一个 hack 数据没过,求调。
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int tr[N << 2], m, p, ans, n, t, len;
char op[2];
void update(int p, int l, int r, int x, int y) {
if (l == x && r == x) return tr[p] = y, void();
int mid = (l + r) >> 1;
if (x <= mid) update(p << 1, l, mid, x, y);
else update(p << 1 | 1, mid + 1, r, x, y);
tr[p] = max(tr[p << 1], tr[p << 1 | 1]);
}
int query(int p, int l, int r, int x, int y) {
if (l >= x && r <= y) return tr[p];
int mid = (l + r) >> 1, ans = 0;
if (x <= mid) ans = query(p << 1, l, mid, x, y);
if (y > mid) ans = max(ans, query(p << 1 | 1, mid + 1, r, x, y));
return ans;
}
int main() {
scanf("%d%d", &m, &p);
n = m;
while (m--) {
scanf("%s%d", op, &t);
if (op[0] == 'A') update(1, 1, n, ++len, (t + ans) % p);
else printf("%d\n", ans = query(1, 1, n, len - t + 1, len));
}
return 0;
}