数据结构基础+STL--第k大
2013-04-05 18:27
537 查看
Description
Xiao Ming andXiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose towrite down a number, or ask Xiao Bao what the kth great number is. Because thenumber written by Xiao Ming is too much, Xiao
Bao is feeling giddy. Now, try tohelp Xiao Bao.
Input
There areseveral test cases. For each test case, the first line of input contains twopositive integer n, k. Then n lines follow. If Xiao Ming choose to write down anumber, there will be an " I" followed by a number
that Xiao Mingwill 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 consistsof one integer representing the largest number of islands that all lie on oneline.
Sample Input
8 3
I 1
I 2
I 3
Q
I 5
Q
I 4
Q
Sample Output
1
2
3
即当输入I时更新数列,输入Q时输出第m大
利用建堆的方式来存储数据及排序
priority_queue<Type,Container, Functional>
其中Type为数据类型,Container 为保存数据的容器,Functional 为元素比较方式。
Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.
STL里面默认用的是vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,
优先队列就是大顶堆,队头元素最大。
priority_queue<int>q;//默认为递增排序,大顶堆
代码:
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main()
{
int n,k,i,a;
char s[2];
while(scanf("%d %d",&n,&k)==2)
{
priority_queue<int ,vector<int>,greater<int> >q;//定义递减的堆
for(i=1;i<=n;i++)
{
scanf("%s",s);
if(s[0]=='I')
{
scanf("%d",&a);
q.push(a);
if(q.size()>k)//仅保存前k小的数据
q.pop();
}
else
printf("%d\n",q.top());
}
}
return 0;
}
Xiao Ming andXiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose towrite down a number, or ask Xiao Bao what the kth great number is. Because thenumber written by Xiao Ming is too much, Xiao
Bao is feeling giddy. Now, try tohelp Xiao Bao.
Input
There areseveral test cases. For each test case, the first line of input contains twopositive integer n, k. Then n lines follow. If Xiao Ming choose to write down anumber, there will be an " I" followed by a number
that Xiao Mingwill 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 consistsof one integer representing the largest number of islands that all lie on oneline.
Sample Input
8 3
I 1
I 2
I 3
Q
I 5
Q
I 4
Q
Sample Output
1
2
3
即当输入I时更新数列,输入Q时输出第m大
利用建堆的方式来存储数据及排序
priority_queue<Type,Container, Functional>
其中Type为数据类型,Container 为保存数据的容器,Functional 为元素比较方式。
Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.
STL里面默认用的是vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,
优先队列就是大顶堆,队头元素最大。
priority_queue<int>q;//默认为递增排序,大顶堆
priority_queue<int ,vector<int>,greater<int> >q;//递减排序,小顶堆
priority_queue<int ,vector<int>,less<int> >q;//递增排序
代码:
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main()
{
int n,k,i,a;
char s[2];
while(scanf("%d %d",&n,&k)==2)
{
priority_queue<int ,vector<int>,greater<int> >q;//定义递减的堆
for(i=1;i<=n;i++)
{
scanf("%s",s);
if(s[0]=='I')
{
scanf("%d",&a);
q.push(a);
if(q.size()>k)//仅保存前k小的数据
q.pop();
}
else
printf("%d\n",q.top());
}
}
return 0;
}
相关文章推荐
- 数据结构基础-队列(循环队列、链式队列)以及STL中queue的使用
- STL之map、set数据结构基础
- 数据结构基础+STL--sequence
- 数据结构基础+STL--tree recovery
- 数据结构基础+STL--winner map
- 数据结构基础+STL--符号匹配
- 数据结构基础+STL--字典翻译
- 数据结构之红黑树(一)——基础分析
- 数据结构基础(11) --循环链表的设计与实现
- 线性表-约瑟夫问题(数据结构基础 第2周)
- uva 11995 I Can Guess the Data Structure!(数据结构:基础)
- 并发基础 -- 无锁(lock-free)数据结构
- 数据结构基础(转载)
- 数据结构基础6.2:图的遍历
- 【数据结构与算法基础】AVL树 / AVL Tree
- 中国大学MOOC-数据结构基础习题集、09-1、Hashing
- 学习STL map, STL set之数据结构基础
- 数据结构基础(C++版)(张力译版)校正 之二 .
- 数据结构基础 之 循环链表
- redis源码解读(二):基础数据结构之ADLIST