线段树板子,样例未过求助
查看原帖
线段树板子,样例未过求助
593255
dist_22r楼主2023/11/7 14:09
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
long long n=0,m,d,t[4*N];
void push_up(int u)
{
	t[u]=max(t[2*u],t[2*u+1])%d;
}
long long query(int u,int l,int r,int a,int b)//查询操作 
{
	if(l>=a&&r<=b)
	{
		return t[u];
	}
	//往下搜 
	int mid=(l+r)/2;
	long long sum=-0x7f;
	if(a<=mid)
	{
		sum=max(sum,query(u*2,l,mid,a,b));
	}
	if(b>mid)
	{
		sum=max(sum,query(u*2+1,mid+1,r,a,b));
	}
	return sum;
}
void update(int u,int l,int r,int a,long long b)//修改操作 
{
	if(l==r)
	{
		t[u]=b;//末尾插入 
		return ;
	}
	//往下搜 
	int mid=(l+r)/2;
	if(a<=mid)
	{
		update(u*2,l,mid,a,b);
	}
	else
	{
		update(u*2+1,mid+1,r,a,b);
	}
	push_up(u);//求最大值 
}
int main()
{
	cin>>m>>d;
	long long f=0;
	for(int i=1;i<=m;i++)
	{
		char op;
		long long l;
		cin>>op>>l;
		if(op=='Q')
		{
			f=query(1,1,n,n-l+1,n);//保存本次操作的结果 
			cout<<f<<endl;
		}
		else
		{
			n++;
			update(1,1,n,n,(f+l)%d);
		}
	}
	return 0;
}
2023/11/7 14:09
加载中...