您的位置:首页 > 其它

hdoj 4006 The kth great number 【栈】

2016-07-26 08:58 441 查看

The kth great number

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

Total Submission(s): 9961    Accepted Submission(s): 3969


[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+大的数出栈,输出K大数,再把出栈的数进栈,如果k很大那不就抓瞎了,
》》脑子灵一点儿
代码:
 
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int main()
{
int n,k,a,b,c;
char str[10];
while(~scanf("%d%d",&n,&k))
{
priority_queue<int,vector<int>,greater<int> > que;
for(int i=0;i<n;i++)
{
scanf("%s",str);
if(strcmp(str,"I")==0)
{
getchar();
scanf("%d",&a);
que.push(a);
if(que.size()>k)	//只保留k个最大的数,前面小的数都出栈
que.pop();
}
else
{
printf("%d\n",que.top());
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: