不知道为什么,样例输出"0 0 97"。
#include<bits/stdc++.h>
#define Steam(a) freopen(#a".in","r",stdin); //freopen(#a".out","w",stdout);
#define Epic ios::sync_with_stdio(false);
#define ff(e,u) for(int e=h[u];e;e=nxt[e])
#define f1(i,a,b) for(int i=(a);i<=(b);i++)
#define f2(i,a,b) for(int i=(a);i>=(b);i--)
#define int long long
#define maxn 2000010
using namespace std;
int m,d;
int a[maxn];
int st[maxn][22];
int Log[maxn];
int cnt;
int h[maxn],nxt[maxn],to[maxn];
void add(int u,int v){
cnt++;
nxt[cnt]=h[u];
h[u]=cnt;
to[cnt]=v;
};
class link_list{
struct node{
};
};
// void init(){
// Log[0]=-1;
// f1(i,1,m){
// Log[i]=(i&&(i-1)==0)?Log[i-1]+1:Log[i-1];
// st[i][0]=a[i];
// };
// for(int j=1;(1<<j)<=m;j++) for(int i=1;(1<<j)<=m-i+1;i++)
// st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
// };
int max(int x,int y){return x>y?x:y;};
int min(int x,int y){return x<y?x:y;};
//查询;
int query(int l,int r){
int k=Log[r-l+1];
return max(st[l][k],st[r-(1<<k)+1][k]);
};
int point;
//新增加;
void change(int j,int value){
Log[j]=(j&&(j-1)==0)?Log[j-1]+1:Log[j-1];
st[j][0]=value;
for(int i=1;(1<<j)<=point-i+1;i++) st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
};
signed main(){
//Steam()
Epic;
int last=0;
Log[0]=-1;
cin>>m>>d;
f1(i,1,m){
char op;
int x;
cin>>op>>x;
if(op=='A'){
point++;
change(point,(x+last)%d);
}else{
if(x==1){
last=a[point];
cout<<last<<endl;
continue;
};
last=query(point-x+1,point);
cout<<last<<endl;
};
};
return 0;
};