把第二十行
if(L>=l&&R<=len) return h[p];
改成
if(L==R) return h[p];
就变成十个WA了
#include<bits/stdc++.h>
#define maxn 800005
using namespace std;
int n,len,TT;
long long t,h[maxn];
inline long long read(){
long long ret=0;char f=1,ch=getchar();
while(!isdigit(ch)) f=(ch=='-'?-f:f),ch=getchar();
while(isdigit(ch)) ret=ret*10+ch-'0',ch=getchar();
return ret*f;
}
void add(int L,int R,int p,int seat,long long x){
if(L==R){h[p]=x;return;}
int mid=(L+R)>>1;
if(seat<=mid) add(L,mid,p*2,seat,x);
else add(mid+1,R,p*2+1,seat,x);
h[p]=max(h[p*2],h[p*2+1]);
}
long long get(int L,int R,int p,int l){
if(L>=l&&R<=len) return h[p];
int mid=(L+R)>>1;long long ret=0;
if(l<=mid) ret=max(ret,get(L,mid,p*2,l));
if(len>mid) ret=max(ret,get(mid+1,R,p*2+1,l));
return ret;
}
int main(){
n=read(),TT=read();
for(int i=1;i<=n;i++){
char ch=getchar();
if(ch=='A'){
long long x=(read()+t)%TT;
add(1,n,1,++len,x);
}else{
int l=len-read()+1;
if(l>len){printf("0\n"),t=0;break;}
t=get(1,n,1,l);
printf("%lld\n",t);
}
}
return 0;
}