都是很后面几行报错的,不知道是哪里出问题了
#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=1e6+5;
int n,m,a[N],d[N];
struct node{
int mi,ma;
bool f;
}t[N<<2];
node M(node ls,node rs)
{
node p;
if(ls.ma<=rs.mi&&ls.f&&rs.f)p.f=true;
else p.f=false;
p.mi=min(ls.mi,rs.mi);
p.ma=max(ls.ma,rs.ma);
return p;
}
void push_down(int p)
{
d[p<<1]=d[p<<1|1]=d[p];
t[p<<1].mi+=d[p];t[p<<1].mi+=d[p];
t[p<<1|1].mi+=d[p];t[p<<1|1].mi+=d[p];
}
void build(int p,int l,int r)
{
if(l==r)
{
t[p].f=true;
t[p].mi=t[p].ma=a[l];
return;
}
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
t[p]=M(t[p<<1],t[p<<1|1]);
}
node query(int p,int nl,int nr,int l,int r)
{
if(l<=nl&&nr<=r)
return t[p];
int mid=(nl+nr)>>1;
if(d[p])push_down(p);
if(r<=mid)return query(p<<1,nl,mid,l,r);
if(l>mid)return query(p<<1|1,mid+1,nr,l,r);
node res,res1=query(p<<1,nl,mid,l,r),res2=query(p<<1|1,mid+1,nr,l,r);
res=M(res1,res2);
return res;
}
void update(int p,int nl,int nr,int l,int r,int x)
{
if(l<=nl&&nr<=r)
{
t[p].mi+=x;t[p].ma+=x;
d[p]+=x;
return;
}
int mid=(nl+nr)>>1;
if(d[p])push_down(p);
if(l<=mid)update(p<<1,nl,mid,l,r,x);
if(mid<r)update(p<<1|1,mid+1,nr,l,r,x);
t[p]=M(t[p<<1],t[p<<1|1]);
}
signed main()
{
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
while(m--)
{
int op;cin>>op;
if(op==1)
{
int l,r,x;cin>>l>>r>>x;
if(r>n)r=n;
update(1,1,n,l,r,x);
}
else{
int l,r;cin>>l>>r;
if(r>n)r=n;
cout<<(query(1,1,n,l,r).f?"Yes":"No")<<'\n';
}
}
cout<<endl;
return 0;
}