P7072 直播获奖

Miku

你只需要一个小小的对顶堆

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
priority_queue <int> q1,q2; 
int n,w;
int p;
void deal(int now){
	int li=max(1,now*w/100);
	if(q1.size()>li){
		int ll=-q1.top();
		q1.pop();
		q2.push(ll);
		return ;
	}else{
		if((!q2.empty())&&(-q1.top()<q2.top())){
			int ll=-q1.top();
			int lll=q2.top();
			q1.pop();
			q2.pop();
			q2.push(ll);
			q1.push(-lll);
			return ;
		}
	}
}
int main(){
	scanf("%d%d",&n,&w);
	for(int i=1;i<=n;++i){
		scanf("%d",&p);
		q1.push(-p);
		deal(i);
		cout<<-q1.top()<<" ";
	}
	return 0;
}
原文地址:https://www.cnblogs.com/For-Miku/p/14012716.html