线段树,最后5个测试点全wa,想知道问题出在哪里
查看原帖
线段树,最后5个测试点全wa,想知道问题出在哪里
377440
Y2y7m楼主2022/1/9 22:58

代码

#include <bits/stdc++.h>

using namespace std;
#define lson i*2
#define rson i*2+1
#define int long long
struct st
{
	int l,r;
	int mx;
	int lazyc,lazyp;
}t[4000010];
int a[1000010];
void build(int i,int l,int r)
{
	t[i].lazyc=-1e10,t[i].lazyp=0;
	t[i].l=l,t[i].r=r;
	if(l==r)
	{
		t[i].mx=a[l];
		return ;
	}
	int mid=(l+r)/2;
	build(lson,l,mid);
	build(rson,mid+1,r);
	t[i].mx=max(t[lson].mx,t[rson].mx);
}
void pushdown(int i)
{
	if(t[i].l==t[i].r)
	{
		t[i].lazyc=0,t[i].lazyp=0;
		return ;		
	}	
	if(t[i].lazyc!=-1e10)
	{
		t[lson].mx=t[i].lazyc;
		t[rson].mx=t[i].lazyc;
		t[lson].lazyc=t[i].lazyc;
		t[rson].lazyc=t[i].lazyc;
		t[i].lazyc=0,t[i].lazyp=0;
		return ;
	}
	if(t[i].lazyp==0)
		return ;
	t[lson].mx+=t[i].lazyp;
	t[rson].mx+=t[i].lazyp;
	t[rson].lazyp+=t[i].lazyp;
	t[lson].lazyp+=t[i].lazyp;
	t[i].lazyp=0;
}
void change2(int i,int l,int r,int d)
{
	pushdown(i);
	if(t[i].l>=l&&t[i].r<=r)
	{
		t[i].lazyp=d;
		t[i].mx+=d;
		return ;
	}
	if(t[lson].r>=l)
		change2(lson,l,r,d);
	if(t[rson].l<=r)
		change2(rson,l,r,d);
	t[i].mx=max(t[lson].mx,t[rson].mx);
}
void change1(int i,int l,int r,int d)
{
	pushdown(i);
	if(t[i].l>=l&&t[i].r<=r)
	{
		t[i].lazyc=d;
		t[i].lazyp=0;
		t[i].mx=d;
		return ;
	}
	if(t[lson].r>=l)
		change1(lson,l,r,d);
	if(t[rson].l<r)
		change1(rson,l,r,d);
	t[i].mx=max(t[lson].mx,t[rson].mx);
}
int query(int i,int l,int r)
{
	pushdown(i);
	if(t[i].l>=l&&t[i].r<=r)
		return t[i].mx;
	int e=-1e10;
	if(t[lson].r>=l)
		e=query(lson,l,r);
	if(t[rson].l<=r)
		e=max(query(rson,l,r),e);
	return e;
}
signed main()
{
	int n,m;
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	build(1,1,n);
	int op,x,y,d;
	while(m--)
	{
		scanf("%lld",&op);
		if(op==1)
		{
			scanf("%lld%lld%lld",&x,&y,&d);
			change1(1,x,y,d);
		}
		if(op==2)
		{
			scanf("%lld%lld%lld",&x,&y,&d);
			change2(1,x,y,d);
		}
		if(op==3)
		{
			scanf("%lld%lld",&x,&y);
			printf("%lld\n",query(1,x,y));
		}
	}
	return 0;
}

2022/1/9 22:58
加载中...