WA求助
查看原帖
WA求助
972251
drink_towind楼主2025/1/22 15:44
#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[100001],c[100001],q[100001];
int op[100001],l[100001],r[100001],tot,ans;
int f[800001],b[800001];
int bu(int a,int l,int r){
	if(l==r){
		f[a]=c[l];
		return 0;
	}
	int x=(l+r)/2;
	bu(2*a,l,x);
	bu(2*a+1,x+1,r);
	f[a]=f[a*2]+f[a*2+1];
	b[a]=-1; 
//	cout<<a<<" "<<l<<" "<<r<<" "<<f[a]<<"\n";
	return 0;
}
int pt(int a,int l,int r){
	int mi=(l+r)/2;
	if(b[a]==-1)return 0;
	b[a*2]=b[a];
	b[a*2+1]=b[a];
	f[a*2]=b[a]*(mi-l+1);
	f[a*2+1]=b[a]*(r-mi);
	b[a]=-1;
	return 0; 
}
long long qu(long long a,long long l,long long r,long long ql,long long qr){
//	cout<<a<<" "<<f[a]<<"\n";
	if(ql<=l&&qr>=r){
		return f[a];
	}
	pt(a,l,r);
	long long mi=(l+r)/2;
	if(qr<=mi)return qu(a*2,l,mi,ql,qr);
	else if(ql>mi)return qu(2*a+1,mi+1,r,ql,qr);
	else{
		long long ans1,ans2;
		ans1=qu(2*a,l,mi,ql,mi);
		ans2=qu(2*a+1,mi+1,r,mi+1,qr);
		return ans1+ans2;
	}
}
int ad(int a,int l,int r,int ql,int qr,int x){
	if(qr<ql)return 0;
	if(ql<=l&&qr>=r){
		b[a]=x;
		f[a]=(r-l+1)*x;
		return f[a];
	}
	pt(a,l,r);
	int mi=(l+r)/2;
	if(qr<=mi)ad(a*2,l,mi,ql,qr,x);
	else if(ql>mi)ad(2*a+1,mi+1,r,ql,qr,x);
	else{
		ad(2*a,l,mi,ql,mi,x);
		ad(2*a+1,mi+1,r,mi+1,qr,x);
	}
	f[a]=f[a*2]+f[a*2+1];
	return 0;
}
int ck(int x){
	for(int i = 1;i<=n;i++){
		c[i]=(a[i]>=x);
	}
	memset(b,-1,sizeof(b));
	bu(1,1,n);
	for(int i = 1;i<=m;i++){
		int d=qu(1,1,n,l[i],r[i]);
		if(op[i]==0){
			ad(1,1,n,l[i],r[i]-d,0);
			ad(1,1,n,r[i]-d+1,r[i],1);
		}
		else{
			ad(1,1,n,l[i],r[i]-d,1);
			ad(1,1,n,r[i]-d+1,r[i],0);
		}
	}
	return qu(1,1,n,k,k);
}
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];
	}
	cin>>k;
	int l = 1,r=n+1;
	while(l<=r){
		int mi=(l+r)/2;
		if(ck(mi))r=mi-1,ans=mi;
		else l=mi+1;
	}
	cout<<ans;
	return 0;
}
2025/1/22 15:44
加载中...