rt,样例过了,全部MLE
#include <bits/stdc++.h>
#define int long long
#define N 200005
using namespace std;
inline void in (int &x){
int f=1;x=0;char c=getchar();
while (c>'9'||c<'0'){if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9'){x=x*10+(c^48);c=getchar();}
x*=f;
}
int m,D,cnt,x,last;char op[3];
struct Segment_Tree{
int mx=-(1<<60);
}Tree[N<<2];
inline void push_up (int u){
Tree[u].mx=max (Tree[u<<1].mx,Tree[u<<1|1].mx);
}
inline void update (int L,int R,int k,int l,int r,int u){
if (L<=l&&R>=r){Tree[u].mx=k;return ;}
int mid=l+r>>1;
if (L<=mid) update (L,R,k,l,mid,u<<1);
if (R>mid) update (L,R,k,mid+1,r,u<<1|1);
push_up (u);
}
inline int query (int L,int R,int l,int r,int u){
if (L<=l&&R<=r) return Tree[u].mx;
int mid=l+r>>1,MAX=-(1<<60);
if (L<=mid) MAX=max (MAX,query (L,R,l,mid,u<<1));
if (R>mid) MAX=max (MAX,query (L,R,mid+1,r,u<<1|1));
return MAX;
}
signed main (){
in (m);in (D);
for (int i=1;i<=m;++i){
scanf ("%s",op);in (x);
if (op[0]=='Q'){printf ("%lld\n",last=query (cnt-x+1,cnt,1,m,1));}
if (op[0]=='A'){++cnt;update (cnt,cnt,(x+last)%D,1,m,1);}
}
return 0;
}