hdu 4006 The kth great number(优先队列)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4006

题目大意:

  第一行 输入 n k,后有 n 行,对于每一行有两种状态 ,①“I x” : 插入 x ② “Q” : 输出当前 第 K大的数

解题思路:

  利用优先队列保证插入新数据后的队列是有序的。

  重点:保证 k 个数的队列就行。加一个标志 flag_k;

I:  如果 flag_k<k,则将新输入的数放入队列中。

   否则判断第k个数是否小于新输入的数,如果小于,则队头出队,新输入的入队:保证队列中第k个数一直是最大的。

Q:  输出队头即可。 

AC Code:

 #include<bits/stdc++.h>
using namespace std;
struct Node
{
int key;
friend bool operator < (Node a,Node b)
{
return a.key>b.key;
}
};
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
priority_queue <Node> q;
int flag_k=;
while(n--)
{
char c;
cin>>c;
if(c=='I')
{
Node tem;
scanf("%d",&tem.key);
if(flag_k<k)
{
flag_k++;
q.push(tem);
}
else
{
if(tem.key>q.top().key)
{
q.pop();
q.push(tem);
}
}
}
else if(c=='Q')
printf("%d\n",q.top().key);
}
}
return ;
}
上一篇:毕设之c#多线程学习(官方+转载)


下一篇:Ext开场表单布局设计