poj 2010 优先队列~

点击打开链接

#include 
#include 
#include 
using namespace std;
const int M=110000;
__int64 Max=1<<30;
typedef struct NODE{
	__int64 score;
	__int64 money;
	
}Node;
Node cow[M];
__int64 n,c,f;
long Lower[M],Upper[M]; //Lower[i] 在 0~i-1中 n/2个cow的最小花费 (n是奇数)
bool cmp(Node a,Node b)
{
	return a.score q; //
	for(i=0;ihalf) 
		{
			total-=q.top(); //最大的出列-> (队列中的half个元素之和始终是 0~i-1个中的最小花费(total))!!
			q.pop(); 
		}	
	}
	priority_queue q1;
	total=0;
	for(i=c-1;i>=0;i--)
	{
		Upper[i]= q1.size()==half? total:Max;
		q1.push(cow[i].money);
		total+=cow[i].money;
		if(q1.size()>half)
		{
			total-=q1.top();
			q1.pop();
		}
	}		
}
int main()
{
	long i,k=0,flag=0;
	cin>>n>>c>>f;
	for(i=0;i>cow[i].score>>cow[i].money;
	}
	sort(cow,cow+c,cmp); //sort分数从小到大 
	pre();
	for(i=c-1;i>=0;i--) //枚举最大中位数 
	{
		if(Lower[i]+cow[i].money+Upper[i]<=f)
		{
			flag=1;
			cout<


你可能感兴趣的:(Data,Structure)