样例过了,改来改去提交多遍总是全WA,求助!
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN=200001;
const long long INF=0x3f3f3f3f;
long long seg[MAXN<<2];
void pushup(int rt){
seg[rt]=max(seg[rt<<1],seg[rt<<1|1]);
}
void update(long long idx,long long val,int rt,int l,int r){
if(l==r){
seg[rt]=val;
return;
}
int m=(l+r)>>1;
if(idx<=m)update(idx,val,rt<<1,l,m);
else update(idx,val,rt<<1|1,m+1,r);
pushup(rt);
}
long long query(long long idxl,long long idxr,int rt,int l,int r){
if(l>=idxl&&r<=idxr)
return seg[rt];
if(l>idxr||r<idxl)
return -INF;
int m=(l+r)>>1;
return max(query(idxl,idxr,rt<<1,l,m),query(idxl,idxr,rt<<1|1,m+1,r));
}
int main(){
long long m,n,d,len=0,t=0;
char c;
scanf("%lld%lld",&m,&d);
for(int i=0;i<MAXN<<2;i++)
seg[i]=-INF;
for(int i=0;i<m;i++){
scanf("%*c%c%lld",&c,&n);
if(c=='Q')
if(!n)printf("0\n");
else{
t=query(len-n+1,len,1,1,m);
printf("%lld\n",t);
}
else if(c=='A')
update(++len,(n+t)%d,1,1,m);
}
return 0;
}