hdu 4006 求第K大的数 优先队列
#include<stdio.h>
#include<queue>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
int n,m,k;
char a;
while(scanf("%d %d",&n,&k)!=EOF)
{
priority_queue<int ,vector<int>,greater<int> >q;
while(n--)
{
getchar();//接收空格键??容易忽略
scanf("%c",&a);
if(a=='I')
{
scanf("%d",&m);
if(q.size()<k)q.push(m);
else
{
if(m>q.top())
{
q.pop();
q.push(m);
}
}
}
else
printf("%d\n",q.top());
}
}
return 0;
}
优先队列,优先队列默认是按从大到小排列的priority_queue<int> q;,如果想要按从小到大排列就:priority_queue<int,vector<int>,greater<int> > q;
这题主要就是维护一个长度为K的优先队列就行了:
I操作:每次遇到比队列里的最小值大的话就,把队顶元素删除,把这个值添加到队列中。
Q操作:直接输出队顶元素。
浙公网安备 33010602011771号