请求大佬教一下,除了附加数据全红。
#include<bits/stdc++.h>
using namespace std;
struct node
{
int l,r,da;
}tree[600010];
int zhi[200010];
void build(int b,int l,int r)
{
tree[b].l=l;
tree[b].r=r;
if(l==r)
{
tree[b].da=zhi[l];
return ;
}
int mid=l+((r-l)>>1),f=b<<1;
build(f,l,mid);
build(f+1,mid+1,r);
tree[b].da=max(tree[f].da,tree[f+1].da);
return ;
}
int cq(int b,int l,int r)
{
if(tree[b].l>=l&&tree[b].r<=r) return tree[b].da;
int f=b<<1;
int s=-2000000000;
if(tree[f].r>=l) s=max(s,cq(f,l,r));
if(tree[f+1].l<=r) s=max(s,cq(f+1,l,r));
return s;
}
int read()
{
int x=0,f=1;
char c=getchar();
while(c>'9'||c<'0')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c^'0');
c=getchar();
}
return x*f;
}
int main()
{
int n,d,p=0,len=0;
long long t=0;
n=read();d=read();
for(int i=1;i<=n;i++)
{
char c;
long long a;
scanf("%c",&c);
a=read();
if(c=='Q')
{
if(p==1)
{
build(1,1,len);
p=0;
}
if(a!=0)
{
t=cq(1,len-a+1,len);
printf("%d\n",t);
}
else t=0;
}
else
{
zhi[++len]=(a+t)%d;
p=1;
}
}
return 0;
}