您的位置:首页 > 其它

HDU 4006 The kth great number

2017-07-18 20:15 369 查看

The kth great number

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)

Total Submission(s): 11483    Accepted Submission(s): 4539


[align=left]Problem Description[/align]
Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to write down a number, or ask Xiao Bao what the kth great number is. Because the number written by Xiao Ming is too much, Xiao Bao is feeling
giddy. Now, try to help Xiao Bao.
 

[align=left]Input[/align]
There are several test cases. For each test case, the first line of input contains two positive integer n, k. Then n lines follow. If Xiao Ming choose to write down a number, there will be an " I" followed by a number that Xiao Ming
will write down. If Xiao Ming choose to ask Xiao Bao, there will be a "Q", then you need to output the kth great number.

 

[align=left]Output[/align]
The output consists of one integer representing the largest number of islands that all lie on one line.

 

[align=left]Sample Input[/align]

8 3
I 1
I 2
I 3
Q
I 5
Q
I 4
Q

 

[align=left]Sample Output[/align]

1
2
3

HintXiao Ming won't ask Xiao Bao the kth great number when the number of the written number is smaller than k. (1=<k<=n<=1000000).

 

题目大意:小明和小宝在玩游戏,小明写下几个数字,小宝找出这几个数字中第k大的数

这道题要用优先队列(如果不用STL可以写一个最小堆),维护一个大小为k的优先队列,每次输入一个数就与队首比较,一直到最后队首一定就是第k大的数

#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
int main(){
int n,k;
while(~scanf("%d%d",&n,&k)){
int num,kount=0;
char ch;
priority_queue<int,vector<int>,greater<int> > que;
while(n--){
getchar();
cin>>ch;
if(ch=='I'){
cin>>num;
kount++;
if(kount<=k){
que.push(num);
}
else{
if(num>que.top()){
que.pop();
que.push(num);
}
}
}
else{
if(que.empty()) continue;
cout<<que.top()<<endl;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: