您的位置:首页 > 编程语言 > C语言/C++

hdu4006 The kth great number 优先队列

2016-09-19 15:51 281 查看



The kth great number

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

Total Submission(s): 10328 Accepted Submission(s): 4138



[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).


[align=left]Source[/align]
The 36th ACM/ICPC Asia Regional Dalian Site —— Online
Contest
两个闲人在玩游戏,每回合A可以写数字或者询问B第k大的数字是啥

我们要做的就是回答第k大的数字是啥

之前各种写都超时啊。。。机房的空调好冷啊。。。。。

这题好早写的我都忘了是啥了。。。。java编译器怎么还没装好啊。。。

反正之前做过这样的题啊,就是sliding window 啊。。。。那玩意儿好像还更难写来着。。。

优先队列里数越小优先值越高要在定义的时候加个greater<int> 啊

具体看代码:

/*
━━━━━┒
┓┏┓┏┓┃μ'sic foever!!
┛┗┛┗┛┃\○/
┓┏┓┏┓┃ /
┛┗┛┗┛┃ノ)
┓┏┓┏┓┃
┛┗┛┗┛┃
┓┏┓┏┓┃
┛┗┛┗┛┃
┓┏┓┏┓┃
┛┗┛┗┛┃
┓┏┓┏┓┃
┃┃┃┃┃┃
┻┻┻┻┻┻
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
const int maxn=1000010;
const int inf=1<<30;
int c[maxn];
int lowbit(int x){
return x&(-x);
}

void update(int x,int val){
while(x<=maxn){
c[x] += val;
x += lowbit(x);
}
}

int getsum(int x){
int sum=0;
while(x>0){
sum += c[x];
x -=lowbit(x);
}
return sum;
}
bool compare(int a,int b){
return a>b;
}

int main(){
int k,n,i,j,number;
string str;
while(~scanf("%d%d",&n,&k)){
priority_queue<int,vector<int>,greater<int> > save;
for(i=1;i<=n;i++){
cin>>str;
if(str=="I"){
scanf("%d",&number);
if(save.size()<k){
save.push(number);
}else{
if(number>save.top()){
save.pop();
save.push(number);
}
}
}else{
printf("%d\n",save.top());
}
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++