唉下午就去sjz呀。。。
调树链剖分调了两天还是没对。。。真是无语了。。。。
不过最近学会了批处理哈哈
晚上cf加油。。。
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAX 110000+9
#define Max(a,b) a>b?a:b
#define max max_
#define ll int
#define intt int
#define inf 0x7fffffff
using namespace std;
ll l[4*MAX],r[4*MAX],max[4*MAX];
void insert(intt x,intt w,intt num)
{
if(l[x]==r[x]&&l[x]==w)
{
max[x]=num;
return;
}
if(w<=r[2*x])
insert(2*x,w,num);
else
insert(2*x+1,w,num);
max[x]=Max(max[2*x],max[2*x+1]);
}
void build(intt x,intt la,intt ra)
{
l[x]=la;
r[x]=ra;
max[x]=0;
if(la==ra)
return;
intt mid=(la+ra)>>1;
build(2*x,la,mid);
build(2*x+1,mid+1,ra);
}
intt ask(intt x,intt la,intt ra)
{
if(l[x]>ra||r[x]<la)
return -inf;
if(la<=l[x]&&r[x]<=ra)
return max[x];
return Max(ask(2*x,la,ra),ask(2*x+1,la,ra));
}
int main()
{
build(1,1,MAX);
int n;
intt now=0,t=0;
ll d;
scanf("%d%d",&n,&d);
while(n--)
{
intt a1;
char ch;
getchar();
scanf("%c%d",&ch,&a1);
if(ch=='A')
{
a1+=t;
a1=a1%d;
now++;
insert(1,now,a1);
}
else
{
t=ask(1,now-a1+1,now);
printf("%d\n",t);
}
}
}