题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1012
没什么好说的……线段树维护区间就行了。第一次居然写错了,真丢人。
1 #include2 #include 3 #include 4 using namespace std; 5 typedef long long ll; 6 ll inline readll(){ 7 ll Num;char ch; 8 while((ch=getchar())<'0'||ch>'9');Num=ch-'0'; 9 while((ch=getchar())>='0'&&ch<='9') Num=Num*10+ch-'0';10 return Num;11 }12 void outll(ll x){13 if(x>=10) outll(x/10);14 putchar(x%10+'0');15 }16 int mx[200010<<2],len=0;17 #define lson l,mid,rt<<118 #define rson mid+1,r,rt<<1|119 void Pushup(int &rt){20 mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);21 }22 void Add(int l,int r,int rt,int pos,int x){23 if(l==r){24 mx[rt]=x;25 return;26 }27 int mid=l+r>>1;28 if(pos<=mid) Add(lson,pos,x);29 else Add(rson,pos,x);30 Pushup(rt);31 }32 int Qry(int l,int r,int rt,int L,int R){33 if(l>=L&&R>=r) return mx[rt];34 int mid=l+r>>1,ret=0;35 if(L<=mid) ret=max(ret,Qry(lson,L,R));36 if(R>mid) ret=max(ret,Qry(rson,L,R));37 return ret;38 }39 int main(){40 int m=readll(),41 d=readll();42 char opt[5];43 ll t=0,num;44 memset(mx,0,sizeof(mx));45 for(int i=1;i<=m;i++){46 scanf("%s",opt);47 num=readll();48 if(opt[0]=='A') Add(1,m,1,++len,(num%d+t%d)%d);49 else{50 t=Qry(1,m,1,len-num+1,len);51 outll(t);52 putchar('\n');53 }54 }55 return 0;56 }