hdu4006 The kth great number 优先队列
2016-09-19 15:51
281 查看
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 |
我们要做的就是回答第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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解