不知道那里错了,把快写改成prinf也是M
#include<bits/stdc++.h>
#define ri register int
#define ll long long
#define ull unsigned long long
#define ls(t) t<<1
#define rs(t) t<<1|1
#define ival int l,int r,int t
#define maxv 1,m,1
#define maxm 200001
inline int read()
{
int x=0;bool f=0;char c=getchar();
while(!isdigit(c)){if(c=='-')f=1;c=getchar();};
while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(f)return ~(x-1);
return x;
}
inline void write(int x)
{
if(x<0)x=~(x-1),putchar('-');
static int sta[35];ri top=0;
do{sta[top++]=x%10,x/=10;}while(x);
while(top)putchar(sta[--top]|48);
}
const int inm=(-1<<31);
int m=read(),d=read(),maxt[maxm<<2],ans0,tot;
inline void pushup(int t){maxt[t]=std::max(maxt[ls(t)],maxt[rs(t)]);}
inline void build(ival)
{
maxt[t]=inm;
if(l==r)return;
int mid=(l+r)>>1;
build(l,mid,ls(t));
build(mid+1,r,rs(t));
}
inline void update(int n,int c,ival)
{
if(l==r){maxt[t]=c;return;}
int mid=(l+r)>>1;
if(mid>=n)update(n,c,l,mid,ls(t));
else update(n,c,mid+1,r,rs(t));
pushup(t);
}
inline int query(int nl,int nr,ival)
{
if(l>=nl&&r<=nr)return maxt[t];
int mid=(l+r)>>1,ans=inm;
if(mid>=nl)ans=query(nl,nr,l,mid,ls(t));
if(mid<nr)ans=std::max(ans,query(nl,nr,mid+1,r,rs(t)));
return ans;
}
int main()
{
build(maxv);
for(ri i=1;i<=m;i++)
{
char ch=getchar();int x0=read();
if(ch=='A')update(++tot,(x0+ans0)%d,maxv);
else
{
ans0=query(tot-x0+1,tot,maxv);
write(ans0);putchar('\n');
}
}
return 0;
}