调的我要寄了
#include <iostream>
#define max(a,b) (a>b?a:b)
#define lc(x) (x<<1)
#define rc(x) (x<<1|1)
#define int long long
using namespace std;
const int N = 200005;
int m,d,n;
int t[N*4];
inline void update(int k,int l,int r,int p,int v){
if(l == r){
t[k] = v;
return ;
}
int mid = l + r >> 1;
if(p <= mid) update(lc(k),l,mid,p,v);
else update(rc(k),mid+1,r,p,v);
t[k] = max(t[lc(k)],t[rc(k)]);
}
inline int query(int k,int l,int r,int x,int y){
if(x == l && r == y){
return t[k];
}
int mid = l + r >> 1;
int a = 0,b = 0;
if(x <= mid) a = query(lc(k),l,mid,x,y);
if(y > mid) b = query(rc(k),mid+1,r,x,y);
return max(a,b);
//if(y <= mid) return query(lc(k),l,mid,x,y);
//else if(x > mid) return query(rc(k),mid+1,r,x,y);
//else return max(query(lc(k),l,mid,x,y),query(rc(k),mid+1,r,x,y));
}
signed main() {
cin >> m >> d;
int x,t=0;
char c;
while(m--){
cin >> c >> x;
if(c == 'A'){
update(1,1,m,n+1,(x+t)%d);
n++;
}else{
if(!x) t = 0;
else t = query(1,1,n,n-x+1,n);
cout << t << endl;
}
}
return 0;
}