AC但是机上没有一个过
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=5e5+5;
struct node{
ll l,r;
ll maxx;
}tree[N*4];
ll input[N],n,m,p,a,x;
char op;
inline void build(ll i,ll l,ll r){
tree[i].l=l;
tree[i].r=r;
if(l==r){
tree[i].maxx=input[l];
return ;
}
ll mid=(l+r)>>1;
build(i*2,l,mid);
build(i*2+1,mid+1,r);
tree[i].maxx=max(tree[i*2].maxx,tree[i*2+1].maxx);
return ;
}
inline void add(ll i,ll dis,ll k){
if(tree[i].l==tree[i].r){
tree[i].maxx=k;
return ;
}
if(dis<=tree[i*2].r)
add(i*2,dis,k);
else
add(i*2+1,dis,k);
tree[i].maxx=max(tree[i*2].maxx,tree[i*2+1].maxx);
return ;
}
inline ll search(ll i,ll l,ll r){
if(tree[i].l>=l&&tree[i].r<=r)
return tree[i].maxx;
if(tree[i].l>r||tree[i].r<l)
return -0x7ffffff;
ll s=-0x7fffffff;
if(tree[i*2].r>=l)
s=max(s,search(i*2,l,r));
if(tree[i*2+1].l<=r)
s=max(s,search(i*2+1,l,r));
return s;
}
int main(){
scanf("%lld%lld",&m,&p);
for(int i=1;i<=N;i++)
input[i]=-0x7fffffff;
build(1,1,N);
while(m--){
scanf(" %c ",&op);
scanf("%lld",&x);
if(op=='A')
add(1,++n,(x+a)%p);
else{
a=search(1,n-x+1,n);
printf("%lld\n",a);
}
}
return 0;
}