#include<bits/stdc++.h>
#define N 100005
#define ll long long
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r>>1)
using namespace std;
inline ll read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return x*f;
}
ll tr[N*4],a[N],n,m,L[N],R[N],op[N],lz[4*N],q;
void build(int p,int l,int r,int x){
if(l==r){tr[p]=a[l]>=x;return;}
build(ls,l,mid,x);build(rs,mid+1,r,x);
tr[p]=tr[ls]+tr[rs];
}
void push_down(int p,int l,int r){
if(!lz[p])return;
lz[ls]=lz[rs]=lz[p];
if(lz[p]==1){tr[ls]=mid-l+1;tr[rs]=r-mid;}
else tr[ls]=tr[rs]=0;
lz[p]=0;
}
void modify_area(int p,int l,int r,int ml,int mr,int x){
if(l>=ml&&r<=mr){tr[p]=(r-l+1)*x;lz[p]=x?1:-1;return;}
if(l>mr||r<ml)return;
push_down(p,l,r);
modify_area(ls,l,mid,ml,mr,x);modify_area(rs,mid+1,r,ml,mr,x);
tr[p]=tr[ls]+tr[rs];
}
ll query(int p,int l,int r,int ql,int qr){
if(l>qr||r<ql)return 0;
if(l>=ql&&r<=qr)return tr[p];
push_down(p,l,r);
return query(ls,l,mid,ql,qr)+query(rs,mid+1,r,ql,qr);
}
ll ask(int p,int l,int r,int pos){
if(l==pos&&pos==r)return tr[p];
if(pos<=mid)return ask(ls,l,mid,pos);
else return ask(rs,mid+1,r,pos);
}
bool check(ll x){
build(1,1,n,x);
for(int i=1;i<=m;i++){
ll cnt=query(1,1,n,L[i],R[i]);
if(!op[i]){
modify_area(1,1,n,L[i],R[i]-cnt,0);
modify_area(1,1,n,R[i]-cnt+1,R[i],1);
}else{
modify_area(1,1,n,L[i],L[i]+cnt-1,1);
modify_area(1,1,n,L[i]+cnt,R[i],0);
}
}
return ask(1,1,n,q);
}
int main(){
n=read(),m=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=m;i++){op[i]=read(),L[i]=read(),R[i]=read();}
q=read();
ll l=1,r=n,ans=0;
while(l<=r){
if(check(mid)){ans=mid;l=mid+1;}
else r=mid-1;
}
printf("%lld",ans);
return 0;
}
能过样例(废话),但是提交莫名全WA
QAQ
跪求大佬orz