线段树求助
查看原帖
线段树求助
733676
jinhongyipie楼主2023/10/12 20:35

请求大佬教一下,除了附加数据全红。

#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;
}
2023/10/12 20:35
加载中...