如题,在十个ac后下面有一个wa
#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
struct node {
int l, r;
int data;
};
int m, p;
node t[4 * N];
void pushup(int u) {
t[u].data = max(t[u << 1].data, t[u << 1 | 1].data);
}
void build(int u, int l, int r) {
t[u].l = l, t[u].r = r;
if (l == r)
return;
int mid = l + r >> 1;
build(u << 1, l, mid);
build(u << 1 | 1, mid + 1, r);
}
int query(int u, int l, int r) {
if (l <= t[u].l && r >= t[u].r)
return t[u].data;
int mid = t[u].l + t[u].r >> 1;
int res = 0;
if (l <= mid)
res = max(res, query(u << 1, l, r));
if (r >= mid + 1)
res = max(res, query(u << 1 | 1, l, r));
return res;
}
void modify(int u, int x, int v) {
if (t[u].l == x && t[u].r == x) {
t[u].data = v;
return;
}
int mid = t[u].l + t[u].r >> 1;
if (x <= mid)
modify(u << 1, x, v);
else
modify(u << 1 | 1, x, v);
pushup(u);
}
int main() {
cin >> m >> p;
int cnt = 0;
int last = 0;
build(1, 1, m);
char op[2];
int x;
while (m--) {
scanf("%s%d", &op, &x);
if (op[0] == 'Q') {
last = query(1, cnt - x + 1, cnt);
printf("%d\n", last);
} else {
modify(1, cnt + 1, (last + x) % p);
cnt++;
}
}
return 0;
}