裸题
#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 200020
#define ls u<<1,l,mid
#define rs u<<1|1,mid+1,r
#define LL long long
using namespace std;
int m,len;
LL d,t;
struct node{
int l,r;
LL Max;
node(){
Max=l=r=0;
}
}nod[maxn*4];
void push_up(int u){nod[u].Max=max(nod[u<<1].Max,nod[u<<1|1].Max);}
void update(int u,int l,int r,int x,LL add){
if(l==r){nod[u].Max=add;return;}
int mid=l+r>>1;
if(x>mid)update(rs,x,add);
else update(ls,x,add);
push_up(u);
}
LL query(int u,int l,int r,int x,int y){
if(x==l&&r==y)return nod[u].Max;
int mid=l+r>>1;
if(x>mid)return query(rs,x,y);
else if(y<=mid)return query(ls,x,y);
else return max(query(ls,x,mid),query(rs,mid+1,y));
}
int main(){
scanf("%d%lld",&m,&d);
char s[5]; LL x;
while(m--){
scanf("%s%lld",s,&x);
if(s[0]=='A'){
x=(x+t)%d;len++;
update(1,1,maxn,len,x);
}else{
t=query(1,1,maxn,len-x+1,len);
printf("%lld\n",t);
}
}
return 0;
}