ST表,思路为反着建表,但是Subtask#0全错。不知道问题在哪。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int n;
int m;
int d;
int x;
int f[N][21];
char op;
int t;
int a[N];
signed main() {
cin>>m>>d;
while(m--){
op=' ';
while(op!='Q'&&op!='A'){
op=getchar();
}
if(op=='Q'){
cin>>x;
int k=__lg(x);
t=max(f[n][k],f[(k!=0)?n-(1<<k):n][k]);
cout<<t<<"\n";
}
else{
cin>>x;
t+=x;
t%=d;
n++;
a[n]=t;
f[n][0]=t;
for(int i=1;i<=20&&(n-(1<<(i-1)))>=0;++i){
f[n][i]=max(f[n][i-1],f[n-(1<<(i-1))][i-1]);
}
}
}
return 0;
}