样例过了,但是

#include<bits/stdc++.h>
using namespace std;
int m,d,n,a[200001],z,k,t,h[200001];
char c;
struct asd{
int left,right,zh;
}tree[400005];
void build(int left,int right,int bh){
tree[bh].left=left;
tree[bh].right=right;
if(left==right){
h[left]=bh;
return;
}
int mid=(left+right)>>1;
build(left,mid,bh*2);
build(mid+1,right,bh*2+1);
}
void add(int k){
if(k==1) return;
if(tree[k/2].zh<tree[k].zh){
tree[k/2].zh=tree[k].zh;
add(k/2);
}
}
int find(int l,int r,int k){
if(tree[k].left==tree[k].right) return tree[k].zh;
int mid=(tree[k].left+tree[k].right)>>1;
if(r<=mid) return find(l,r,k*2);
if(l>mid) return find(l,r,k*2+1);
return max(find(l,mid,k*2),find(mid+1,r,k*2+1));
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>m>>d;
n=m;
build(1,n,1);
while(m--){
cin>>c>>k;
if(c=='A'){
a[++z]=(k+t)%d;
tree[h[z]].zh=a[z];
add(h[z]);
}
if(c=='Q'){
t=find(z-k+1,z,1);
printf("%d\n",t);
}
}
}