#include<bits/stdc++.h>
using namespace std;
int w[400001];
int lazy[400001];
int l[100001],r[100001],op[1000001],a[100001];
int n,m,q;
int ls(int x)
{
return x<<1;
}
int rs(int x)
{
return x<<1|1;
}
void pushup(int x)
{
w[x]=w[ls(x)]+w[rs(x)];
}
void build(int l,int r,int x,int k)
{
if(l==r)
{
lazy[x]=-1;
if(a[l]>=k)
w[x]=1;
else w[x]=0;
return;
}
int mid=l+r>>1;
if(l<=mid)
build(l,mid,ls(x),k);
if(r>mid)
build(mid+1,r,rs(x),k);
pushup(x);
}
void pushdown(int x,int l,int r)
{
if(lazy[x]==-1)
return;
int mid=l+r>>1;
lazy[ls(x)]=lazy[rs(x)]=lazy[x];
w[ls(x)]=lazy[x]*(mid-l+1);
w[rs(x)]=lazy[x]*(r-mid);
lazy[x]=-1;
}
void update(int l,int r,int x,int L,int R,int k)
{
if(R<l||l>R)return;
if(L<=l&&r<=R)
{
if(k==1)
w[x]=r-l+1;
else w[x]=0;
lazy[x]=k;
return;
}
pushdown(x,l,r);
int mid=l+r>>1;
if(L<=mid)
update(l,mid,ls(x),L,R,k);
else update(mid+1,r,rs(x),L,R,k);
pushup(x);
}
int query(int l,int r,int x,int L,int R)
{
if(L<=l&&r<=R)
{
return w[x];
}
pushdown(x,l,r);
int mid=l+r>>1,ans=0;
if(L<=mid)
ans+=query(l,mid,ls(x),L,R);
else ans+=query(mid+1,r,rs(x),L,R);
return ans;
}
bool check(int x)
{
build(1,n,1,x);
for(int i=1;i<=m;i++)
{
int L=l[i],R=r[i],OP=op[i];
int cnt=query(1,n,1,L,R);
if(OP==0)
{
update(1,n,1,R-cnt+1,R,1);
update(1,n,1,L,cnt,0);
}
else{
update(1,n,1,L,L+cnt-1,1);
update(1,n,1,L+cnt,R,0);
}
}
return query(1,n,1,q,q);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
cin>>op[i]>>l[i]>>r[i];
int l=0,r=n+1;
cin>>q;
while(l+1<r)
{
int mid=l+r>>1;
if(check(mid))
l=mid;
else r=mid;
//cout<<l<<" "<<r<<endl;
}
cout<<l;
}
样例不过,球球了