【线段树】样例过不去求助
查看原帖
【线段树】样例过不去求助
481330
sunyizhe还是MC大佬楼主2023/1/27 20:15

本人即将下线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;
}
2023/1/27 20:15
加载中...