杭电 4006 The kth great number 队列 附题目翻译

来源:互联网 发布:淘宝找不到已买的宝贝 编辑:程序博客网 时间:2024/04/29 19:29

The kth great number

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 8280    Accepted Submission(s): 3272


Problem Description
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.
 


 

Input
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.
 


 

Output
The output consists of one integer representing the largest number of islands that all lie on one line.
 


 

Sample Input
8 3I 1I 2I 3QI 5QI 4Q
 


 

Sample Output
123
Hint
Xiao 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大的数是几。因为小明写的数太多了,小宝觉得有些晕。现在,试着帮帮小宝。

 

输入

有多组测试数据。对于每组测试数据,首行的输入包含两个正整数(positive integer)n和k。下面有n行。如果小明决定写数字,那么在数字之前会有一个I。如果小明选择问小宝,那么将有Q,然后你需要输出第k大的数字。

 

输出

输出由一个整数组成,表示最大数。

 

注意:当写下的数字数目小于k的时候小明不会提问。

 

这道题还是需要清空队列的。另外,这里不要用ch来接收,太麻烦了。。

#include<stdio.h>#include<queue>using namespace std;priority_queue <int,vector<int>,greater<int> > q;int main(){int n,k,a;char ch[5];while(~scanf("%d%d",&n,&k)){while(n--){scanf("%s",ch);if(ch[0]=='I'){scanf("%d",&a);if(q.size()>=k){if(a>q.top()) {q.push(a);q.pop();}}else q.push(a);}else {printf("%d\n",q.top());}}while(!q.empty()) q.pop();}return 0;}

 

0 0
原创粉丝点击