60pts求助
查看原帖
60pts求助
259300
hy233楼主2021/12/29 21:07

莫名RE 记录

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll rd()
{
	ll ans;
	scanf("%lld",&ans);
	return ans;
} 
ll a[1000005];
struct Sgt
{
	int l,r;
	ll sl,sr;
	bool xb;
	ll lt;
	Sgt operator+(Sgt b)
	{
		Sgt s;
		s.l=l;
		s.r=b.r;
		s.sl=sl;
		s.sr=b.sr;
		if(sr<=b.sl&&xb&&b.xb)
			s.xb=1;
		else
			s.xb=0;
		s.lt=0;
		return s;
	}
};
Sgt t[1000005];
int n,k;
void pushdown(int p)
{
	t[p*2].sl+=t[p].lt;
	t[p*2].sr+=t[p].lt;
	t[p*2].lt+=t[p].lt;
	
	t[p*2+1].sl+=t[p].lt;
	t[p*2+1].sr+=t[p].lt;
	t[p*2+1].lt+=t[p].lt;
	
	t[p].lt=0;
}
void build(int l,int r,int p)
{
	t[p].l=l;
	t[p].r=r;
	t[p].lt=0;
	if(l==r)
	{
		t[p].sl=t[p].sr=a[l];
		t[p].xb=1;
		return;
	}
	int mid=(l+r)/2;
	build(l,mid,p*2);
	build(mid+1,r,p*2+1);
	t[p]=t[p*2]+t[p*2+1];
}
void add(int l,int r,ll k,int p)
{
	if(t[p].l>=l&&t[p].r<=r)
	{
		t[p].sl+=k;
		t[p].sr+=k;
		t[p].lt+=k;
		return;
	}
	pushdown(p);
	int mid=(t[p].l+t[p].r)/2;
	if(l<=mid) add(l,r,k,p*2);
	if(r>=mid+1) add(l,r,k,p*2+1);
	t[p]=t[p*2]+t[p*2+1];
}
Sgt que(int l,int r,int p)
{
	if(t[p].l>=l&&t[p].r<=r)
	{
		return t[p];
	}
	pushdown(p);
	int mid=(t[p].l+t[p].r)/2;
	if(r<=mid) return que(l,r,p*2);
	else if(l>=mid+1) return que(l,r,p*2+1);
	else
		return que(l,r,p*2)+que(l,r,p*2+1);
}
int main()
{
 	n=rd(); k=rd();
 	for(int i=1;i<=n;i++)
 		a[i]=rd();
 	build(1,n,1);
 	while(k--)
 	{
		int op,l,r;
		op=rd(); l=rd(); r=rd();
		if(op==1)
		{
			ll x;
			x=rd();
			add(l,r,x,1);
		}	
		if(op==2)
		{
			if(que(l,r,1).xb)
				cout<<"Yes\n";
			else
				cout<<"No\n";
		}
	}
	return 0;
}
2021/12/29 21:07
加载中...