rt,和题解对看了1h也没找出什么错误,我快炸了QAQ.
我现在的思维很乱,对着模板看也不知道哪错了,样例都没过
cnmd线段树
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,m,mod;
int a[N],sum[N*4];
inline int lc(int x){
return x<<1;
}
inline int rc(int x){
return x<<1|1;
}
void add(int x,int p,int l,int r,int d){
if(l==r){
sum[x]=max(sum[x],d);
return ;
}
int mid=(l+r)/2;
if(p<=mid)add(lc(x),p,l,mid,d);
else add(rc(x),p,mid+1,r,d);
sum[x]=max(sum[lc(x)],sum[rc(x)]);
}
int query(int x,int l,int r,int l1,int r1){
if(l1<=l&&r<=r1){
return sum[x];
}
int mid=(l+r)/2;
int res=0;
if(l1<=mid)max(res,query(lc(x),l,mid,l1,r1));
if(mid<r1)max(res,query(rc(x),mid+1,r,l1,r1));
return res;
}
signed main(){
int k,t=0;
char op;
scanf("%lld%lld",&m,&mod);
for(int i=1;i<=m;i++){
cin>>op;
scanf("%lld",&k);
if(op=='A'){
n++;
add(1,n,1,m,(k+t)%mod);
}else if(op=='Q'){
if(k==0){
printf("0\n");
}else{
t=query(1,1,m,n-k+1,n);
printf("%lld\n",t);
}
}
}
return 0;
}