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

67 篇文章 0 订阅
5 篇文章 0 订阅

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 3 I 1 I 2 I 3 Q I 5 Q I 4 Q
 


 

Sample Output
  
  
1 2 3
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值