本人即将下线qwq
顺便问一下如何秒切这种线段树
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=200010,INF=0x3f3f3f3f;
LL m,MOD,T;//T为最近一次查找的值
LL t[N],len;//len为序列长度
//添加就是修改一个值为0的点
void modify(LL rt,LL l,LL r,LL x,LL v)
{
if(l==r)
{
t[rt]=v;
return;
}
LL mid=(l+r)>>1;
if(x<=mid)modify(rt*2,l,mid,x,v);
else modify(rt*2+1,mid+1,r,x,v);
t[rt]=max(t[rt*2],t[rt*2+1]);
}
LL query(LL rt,LL L,LL R,LL l,LL r)
{
if(l>=L&&r<=R)return t[rt];
LL ans=-INF;
LL mid=(L+R)>>1;
if(l<=mid)ans=max(ans,query(rt*2,L,mid,l,r));
if(r>mid)ans=max(ans,query(rt*2+1,mid+1,R,l,r));
return ans;
}
int main()
{
scanf("%lld %lld",&m,&MOD);
for(int i=1;i<=m;i++)
{
char op;
int x;
scanf(" %c %d",&op,&x);
assert(op=='A'||op=='Q');
if(op=='A')
{
len++;
modify(1,1,m,len,(T+x)%MOD);
}
else
{
T=query(1,1,m,len-x+1,m);
printf("%lld\n",T);
}
}
return 0;
}