莫名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;
}