比赛 2025.3.29 评测结果 AAAAAAAAAA
题目名称 排序 最终得分 100
用户昵称 flyfree 运行时间 4.187 s
代码语言 C++ 内存使用 6.54 MiB
提交时间 2025-03-29 09:59:24
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pir pair<ll,ll>
#define ls first
#define rs second
#define mp make_pair
#define mod
#define MAXN 200010
#define qmod(x) (x>mod?x-mod:x)
#define debug cout<<"flyfreemrn\n";
// By flyfreemrn
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
struct node_sgt{
	ll cnt[MAXN*4],l[MAXN*4],r[MAXN*4],tag[MAXN*4];
	void build(ll lz,ll rz,ll now){
		l[now]=lz,r[now]=rz;
		tag[now]=-1;
		if(lz==rz)return;
		ll mid=(lz+rz)>>1;
		build(lz,mid,now<<1);
		build(mid+1,rz,now<<1|1);
	}
	void push_down(ll now){
		if(tag[now]>-1){
			cnt[now<<1]=(r[now<<1]-l[now<<1]+1)*tag[now];
			cnt[now<<1|1]=(r[now<<1|1]-l[now<<1|1]+1)*tag[now];
			tag[now<<1]=tag[now];
			tag[now<<1|1]=tag[now];
			tag[now]=-1;
		}
	}
	void push_up(ll now){
		cnt[now]=cnt[now<<1]+cnt[now<<1|1];
	}
	void modify(ll lz,ll rz,ll now,ll val){
//		if(now==1)cout<<"modify: "<<lz<<" "<<rz<<" "<<val<<endl;
		push_down(now);
		if(l[now]>=lz&&r[now]<=rz){
			cnt[now]=(r[now]-l[now]+1)*val;
			tag[now]=val;
			return;
		}
		ll mid=(l[now]+r[now])>>1;
		if(lz<=mid)modify(lz,rz,now<<1,val);
		if(rz>mid) modify(lz,rz,now<<1|1,val);
		push_up(now);
	}		
	ll get(ll lz,ll rz,ll now){
		if(l[now]>=lz&&r[now]<=rz)return cnt[now];
		ll mid=(l[now]+r[now])>>1,res=0;
		push_down(now);
		if(lz<=mid)res+=get(lz,rz,now<<1);
		if(rz>mid)res+=get(lz,rz,now<<1|1);
		return res;
	}
}sgt;
ll a[MAXN];
ll n,m,q;
ll type[MAXN],l[MAXN],r[MAXN];
bool solve(ll p){
//	cout<<p<<endl;
	sgt.build(1,n,1);
//	debug;
	for(int i=1;i<=n;i++){
		if(a[i]>=p)sgt.modify(i,i,1,1);
		else sgt.modify(i,i,1,0);
	}
//	for(int j=1;j<=n;j++)cout<<sgt.get(j,j,1);
//	cout<<endl;
//	debug;
	for(int i=1;i<=m;i++){
		ll cnt=sgt.get(l[i],r[i],1);
//		cout<<type[i]<<" "<<l[i]<<" "<<r[i]<<" "<<cnt<<endl;
		if(!cnt||cnt==r[i]-l[i]+1)continue;
		if(type[i]==0){
			sgt.modify(l[i],r[i]-cnt,1,0);
			sgt.modify(r[i]-cnt+1,r[i],1,1); 
		}else{
			sgt.modify(l[i],l[i]+cnt-1,1,1);
			sgt.modify(l[i]+cnt,r[i],1,0); 
		}
//		for(int j=1;j<=n;j++)cout<<sgt.get(j,j,1);
//		cout<<endl;
	}
	if(sgt.get(q,q,1))return true;
	else return false;
}
int main(){
	freopen("heoi2016_sort.in", "r", stdin);
	freopen("heoi2016_sort.out", "w", stdout);
	n=read(),m=read();
	for(int i=1;i<=n;i++)a[i]=read();
	for(int i=1;i<=m;i++)type[i]=read(),l[i]=read(),r[i]=read();
	q=read();
	ll lz=1,rz=n;
	while(rz>lz){
//		cout<<lz<<" "<<rz<<endl;
		ll mid=(lz+rz+1)>>1;
		if(solve(mid))lz=mid;
		else rz=mid-1;
	}
	cout<<lz<<endl;
	return 0;
}