题目描述 传送门
有用单调数据结构的更好的做法,不过我先写个线段树。
cin无限RE!!
代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=200005;
int maxv[maxn*4],ans=0,now,m,t;
void update(int o,int L,int R,int x,int k){
if(L==R) { maxv[o]=k;return ;}
int mid=L+R>>1;
if(x<=mid) update(o<<1,L,mid,x,k);
else update(o<<1|1,mid+1,R,x,k);
maxv[o]=max(maxv[o<<1],maxv[o<<1|1]);
}
int query(int o,int L,int R,int l,int r){
if(l<=L&&r>=R) return maxv[o];
int mid=L+R>>1,ans=-1e9;
if(l<=mid) ans=max(ans,query(o<<1,L,mid,l,r));
if(r>mid) ans=max(ans,query(o<<1|1,mid+1,R,l,r));
return ans;
}
int main(){
scanf("%d%d",&m,&t);
now=1;
for(int i=0;i<m;i++){
char c[5];
int k;
scanf("%s%d",c,&k);
if(c[0]=='A'){
k=(k+ans)%t;
update(1,1,m,now++,k);
}
else{
ans=query(1,1,m,now-k,now-1);
printf("%d\n",ans);
}
}
return 0;
}