P1198 样例过了,不知道错在哪里
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int n = 200005;
ll m, d;
ll t;
ll maxv[1000005];
ll s;
void pushup(ll x) {
maxv[x] = max(maxv[x << 1], maxv[x << 1 | 1]);
}
void init(ll l, ll r, ll id) {
maxv[id] = -0x3ffffffff;
if (l == r) {
return ;
}
ll mid = (l + r) >> 1;
init(l, mid, id << 1);
init(mid + 1, r, id << 1 | 1);
}
void insert(ll l, ll r, ll num, ll id) {
if (l == r) {
maxv[id] = num;
return;
}
ll mid = (l + r) >> 1;
if (s <= mid) {
insert(l, mid, num, id << 1);
} else {
insert
(mid + 1, r, num, id << 1 | 1);
}
pushup(id);
}
ll query(ll l, ll r, ll x, ll y, ll id) {
if (x <= l && r <= y) {
return maxv[id];
}
ll ans = -0x3ffffffff;
ll mid = (l + r) >> 1;
if (x <= mid) ans = max(ans, query(l, mid, x, y, id << 1));
if (y > mid) ans = max(ans, query(mid + 1, r, x, y, id << 1 | 1));
return ans;
}
int main(){
scanf("%lld%lld", &m, &d);
init(1, n, 1);
for (int i = 1; i <= m; i++) {
char kong;
scanf("%c", &kong);
char c;
ll num;
scanf("%c%lld", &c, &num);
if (c == 'A') {
num += t;
num %= d;
s++;
insert(1, m, num, 1);
} else {
ll ans = query(1, m, s - num + 1, m, 1);
if (num == 0) {
ans = 0;
}
printf("%lld\n", ans);
t = ans;
}
}
return 0;
}