求条
  • 板块题目总版
  • 楼主UnknownLqx
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/5 16:11
  • 上次更新2024/7/5 17:49:43
查看原帖
求条
1272956
UnknownLqx楼主2024/7/5 16:11
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string.h>
#include <string>
#include <algorithm>
#include <iomanip>
#include <queue>
using namespace std;
struct Node{
	long long csat;
	long long a;
	bool operator < (const Node b) const{
	    return a<b.a;
	}
}cow[200007];
bool cmp(Node a,Node b){
	return a.csat>b.csat;
}
priority_queue<Node> q;
long long i,n,c,f,L[200007],R[200007],sum;
void Clear(){
	while(!q.empty()) q.pop();
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>c>>f;
    for(i=1; i<=c; i++) cin>>cow[i].csat>>cow[i].a;
    sort(cow+1,cow+1+c,cmp);
    for(i=1; i<=n/2; i++){
    	sum+=cow[i].a;
    	q.push(cow[i]);
	}
	L[i]=sum;
	for(i=n/2+1; i<=c-n/2; i++){
		if(q.top().a>cow[i].a){
			sum-=q.top().a;
			sum+=cow[i].a;
			q.pop();
			q.push(cow[i]);
		}
		L[i]=sum;
	}
	Clear();
	sum=0;
	for(i=c; i>=c-n/2+1; i--){
    	sum+=cow[i].a;
    	q.push(cow[i]);
	}
	R[i]=sum;
	for(i=c-n/2; i>=n/2+1; i--){
		if(q.top().a>cow[i].a){
			sum-=q.top().a;
			sum+=cow[i].a;
			q.pop();
			q.push(cow[i]);
		}
		R[i]=sum;
	}
	for(i=c-n/2; i>=n/2+1; i--){
		if(L[i]+R[i]+cow[i].a<=f){
			cout<<cow[i].csat;
			return 0;
		}
	}
	cout<<"-1";
}
2024/7/5 16:11
加载中...