#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N=100010;
int n,m,a[N];
struct node{
int l,r;
int add;
int ok0,ok1,ok2,ok3;//相同,升序,降序,单峰
int maxv,id;//最大值,以及下标
int v1,v2;//最左边,右边值
};
node tr[N*4];
void pushup(node &w , node &l,node &r){
if(l.ok0&&r.ok0&&l.maxv==r.maxv) //ok0
w.ok0=1;
else w.ok0=0;
if(l.ok1&&r.ok1&&l.v2<r.v1)
w.ok1=1;
else w.ok1=0;
if(l.ok2&&r.ok2&&l.v2>r.v1)
w.ok2=1;
else w.ok2=0;
if(l.maxv>=r.maxv){
w.maxv=l.maxv;
w.id=l.id;
} else{
w.maxv=r.maxv;
w.id=r.id;
}
w.v1=l.v1,w.v2=r.v2;
}
void pushup(int u) {
pushup(tr[u],tr[u*2],tr[u*2+1]);
}
void build(int u,int l,int r){
tr[u]={l,r};
if(l==r){
tr[u]={l,r,0,1,1,1,0,a[l],l,a[l],a[l]};
return;
}
int mid=(l+r)/2;
build(u*2,l,mid);
build(u*2+1,mid+1,r);
pushup(u);//更新父亲
}
void change(int u,int x){
tr[u].add+=x;
tr[u].maxv+=x;
tr[u].v1+=x,tr[u].v2+=x;
}
void pushdown(int u){
change(u*2,tr[u].add);
change(u*2+1,tr[u].add);
tr[u].add=0;
}
void modify(int u,int l,int r,int x){
if(tr[u].l>=l&&tr[u].r<=r){
tr[u].add+=x;
tr[u].maxv+=x;
tr[u].v1+=x,tr[u].v2+=x;
}else{
pushdown(u);
int mid=(tr[u].l+tr[u].r)/2;
if(l<=mid) modify(u*2,l,r,x);
if(r>mid) modify(u*2+1,l,r,x);
pushup(u);
}
}
node query(int u,int l,int r){
if(tr[u].l>=l&&tr[u].r<=r)
return tr[u];
pushdown(u);
int mid=(tr[u].l+tr[u].r)/2;
if(r<=mid) return query(u*2,l,r);
else if(l>mid) return query(u*2+1,l,r);
else{
node res,left,right;//合并
left=query(u*2,l,r);
right=query(u*2+1,l,r);
pushup(res,left,right);
return res;
}
}
void solve()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
build(1,1,n);
while(m--){
int ok,l,r,flag=0;
cin>>ok>>l>>r;
if(ok==1){
int x;cin>>x;
modify(1,l,r,x);
continue;
}else if(ok==2){
node res=query(1,l,r);
if(res.ok0==1) flag=1;
}else if(ok==3){
node res=query(1,l,r);
if(res.ok1==1) flag=1;
}else if(ok==4){
node res=query(1,l,r);
if(res.ok2==1) flag=1;
}else if(ok==5){
node res=query(1,l,r);
int id=res.id;
if(id!=l&&id!=r) {
node left=query(1,l,id);
node right=query(1,id+1,r);
if(left.ok1&&right.ok2)
flag=1;
}
}
cout<<flag<<endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
return 0;
}
05-24
141
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
02-15
140
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-24
868
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-27