样例未过,求条
查看原帖
样例未过,求条
1585174
liuyanchen1楼主2025/7/22 11:36
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node
{
	int m,op,lazy,n; 
};
node dis[4000005];
int a[100005];
void push(int p)
{
	int lazy=dis[p].lazy;
	dis[p].lazy=0;
	dis[p<<1].m+=lazy;
	dis[p<<1|1].m+=lazy;
	dis[p<<1].n+=lazy;
	dis[p<<1|1].n+=lazy;
	dis[p<<1].lazy+=lazy;
	dis[p<<1|1].lazy+=lazy;
	dis[p].m=max(dis[p<<1].m,dis[p<<1|1].m);
	dis[p].n=min(dis[p<<1].n,dis[p<<1|1].n);
}
void build(int l,int r,int p)
{
	if(l==r)
	{
		dis[p].m=dis[p].n=a[l];
		dis[p].op=1;
		return;
	}
	int mid=(l+r)>>1;
	build(l,mid,p<<1);
	build(mid+1,r,p<<1|1);
	dis[p].m=max(dis[p<<1].m,dis[p<<1|1].m);
	dis[p].n=min(dis[p<<1].n,dis[p<<1|1].n);
	if(dis[p<<1].op==0||dis[p<<1|1].op==0||dis[p<<1|1].m<dis[p<<1].m||dis[p<<1|1].n<dis[p<<1].m)
		dis[p].op=0;
	else
		dis[p].op=1;
	
}
void update(int l,int r,int ansl,int ansr,int x,int p)
{
	if(ansl<=l && ansr>=r)
	{
		dis[p].m+=x;
		dis[p].n+=x;
		dis[p].lazy+=x;
		return;
	}
	int mid=(l+r)>>1;
	if(ansl<=mid)
		update(l,mid,ansl,ansr,x,p<<1);
	if(ansr>mid)
		update(mid+1,r,ansl,ansr,x,p<<1|1);
	dis[p].m=max(dis[p<<1].m,dis[p<<1|1].m);
	dis[p].n=min(dis[p<<1].n,dis[p<<1|1].n);
	if(dis[p<<1].op==0||dis[p<<1|1].op==0||dis[p<<1|1].m<dis[p<<1].m||dis[p<<1|1].n<dis[p<<1].m)
		dis[p].op=0;
	else
		dis[p].op=1;
} 
int ans(int l,int r,int ansl,int ansr,int p)
{
	if(ansl<=l && ansr>=r)
	{
		return dis[p].op;
	}
	if(dis[p].lazy)
	{
		push(p);
	}
	int mid=(l+r)>>1,t=1;
	if(ansl<=mid)
		t=min(ans(l,mid,ansl,ansr,p<<1),t);
	if(ansr>mid)
		t=min(ans(mid+1,r,ansl,ansr,p<<1|1),t);
	return t;
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=4*n;i++)
		dis[i].n=1e9;
	build(1,n,1);
	while(k--)
	{
		int opt,l,r,x;
		cin>>opt>>l>>r;
		l=min(l,r);
		r=max(l,r);
		if(opt==1)
		{
			cin>>x;
			update(1,n,l,min(r,n),x,1);
		}
		else
		{
			//update(1,n,2,n-1,0,1);
			if(ans(1,n,l,min(r,n),1))
				cout<<"Yes"<<"\n";
			else
				cout<<"No"<<"\n";
		}
	}
}
2025/7/22 11:36
加载中...