RT,样例输出全0,找不出错误了,求助!!
#include<iostream>
using namespace std;
#define MAXN 200005
int t=0,m,q,n=0,sizing=0;
struct node{
int l,r,maxn;
}tree[4*MAXN];
void build(int i,int l,int r){
tree[i].l=l,tree[i].r=r,tree[i].maxn=-2147483647;
if(l==r){
tree[i].maxn=0;
return;
}
int mid=(l+r)/2;
build(i*2,l,mid),build(i*2+1,mid+1,r);
tree[i].maxn=max(tree[i*2].maxn,tree[i*2+1].maxn);
return;
}
void update(int i,int x,int k){
if(tree[i].l==tree[i].r){
tree[i].maxn=k;
return;
}
int mid=(tree[i].l+tree[i].r)/2;
if(x<=mid)
update(i*2,x,k);
if(x>=mid+1)
update(i*2+1,x,k);
tree[i].maxn=max(tree[i*2].maxn,tree[i*2+1].maxn);
return;
}
int get_max(int i,int l,int r){
if(tree[i].l>=l&&tree[i].r<=r)
return tree[i].maxn;
int mid=(tree[i].l+tree[i].r)/2,res=-2147483647;
if(mid>=l)
res=max(res,get_max(i*2,l,r));
if(mid+1<=r)
res=max(res,get_max(i*2+1,l,r));
return res;
}
int main(){
cin>>m>>q;
build(1,1,MAXN);
while(m--){
char op;
int x;
cin>>op>>x;
if(op=='A')
n=(n+t)%q,sizing++,update(1,sizing,n);
else
cout<<get_max(1,x,sizing)<<endl,t=get_max(1,x,sizing);
}
return 0;
}