50分求条
查看原帖
50分求条
1331638
zhouwenbo1234楼主2025/4/2 19:47
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;

int n,c,f,root[N],idx;
vector<int> v;
struct node{
	int a,b; 
}stu[N];

struct nodee{
	int l,r;
	int cnt,sum;
}tree[N*25];

int read(){
	int 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;
}

int cmp(node x,node y){
	return x.a<y.a;
}

int build(int l,int r){
	int u=++idx;
	if (l==r)
		return u;
	int mid=(l+r)>>1;
	tree[u].l=build(l,mid);
	tree[u].r=build(mid+1,r);
	return u;
}

int insert(int p,int l,int r,int x){
	int u=++idx;
	tree[u]=tree[p];
	if (l==r){
		tree[u].cnt++;
		tree[u].sum+=v[l];
		return u;
	}
	int mid=(l+r)>>1;
	if (x<=mid)
		tree[u].l=insert(tree[u].l,l,mid,x);
	else
		tree[u].r=insert(tree[u].r,mid+1,r,x);
	tree[u].cnt=tree[tree[u].l].cnt+tree[tree[u].r].cnt;
	tree[u].sum=tree[tree[u].l].sum+tree[tree[u].r].sum;
	return u;
}

int query(int p,int q,int l,int r,int k){
	if (l==r)
		return k*v[l];
	int cnt=tree[tree[q].l].cnt-tree[tree[p].l].cnt;
	int mid=(l+r)>>1;
	int sum=0;
	if (k<=cnt)
		sum+=query(tree[p].l,tree[q].l,l,mid,k);
	else{
		sum+=tree[tree[q].l].sum-tree[tree[p].l].sum;
		sum+=query(tree[p].r,tree[q].r,mid+1,r,k-cnt);
	}
	return sum;
}

int discrete(int x){
	return lower_bound(v.begin(),v.end(),x)-v.begin();
}

int main(){
	n=read(),c=read(),f=read();
	int k=n/2;
	for (int i=1;i<=c;i++){
		stu[i].a=read(),stu[i].b=read();
		v.push_back(stu[i].b);
	}
	sort(v.begin(),v.end());
	v.erase(unique(v.begin(),v.end()),v.end());
	sort(stu+1,stu+1+c,cmp);
	root[0]=build(0,v.size()-1);
	for (int i=1;i<=c;i++){
		root[i]=insert(root[i-1],0,v.size()-1,discrete(stu[i].b));
	}
	int ans=-1,anss,ansss;
	for (int i=c-(n/2);i>=1+(n-1)/2;i--){
		anss=query(root[0],root[i-1],0,v.size()-1,k);
		ansss=query(root[i],root[c],0,v.size()-1,k);
//		cout <<"anss:"<<anss<<" ansss:"<<ansss<<endl; 
		if (anss+ansss+discrete(stu[i].b)<=f)
			ans=max(ans,stu[i].a);
		if (ans!=-1)
			break;
	}
	cout <<ans<<endl;
	return 0;
}
2025/4/2 19:47
加载中...