POJ 1442 Black Box 优先队列
2016-04-04 20:10
351 查看
POJ 1442 可以当做是优先队列的模板
/* poj 1442 题意:给定M个数,每次可以插入序列一个数;再给N个数,表示在插入第几个数时输出一个数, 第一次输出序列中最小的,第二次输出序列中第二小的……以此类推,直到输出N个数。 优先队列的使用: 本题思路是建立一个小顶堆p和一个大顶堆q, q保存前k个小的数,且保证p的值都比q的大, 最后输出q的顶 */ #include <iostream> #include <cstdio> #include <algorithm> #include <queue> using namespace std; int main() { int n,m,i,a[31000]; cin>>m>>n; for(i=0; i<m; i++) scanf("%d",&a[i]); int num=1,b1=0,b2,j=0,s,k=1; priority_queue<int ,vector<int>,greater<int> >p;/*小顶堆,即从小到大*/ priority_queue<int ,vector<int>,less<int> >q; while(n--) { scanf("%d",&b2); while(b1<b2)/*先把数都放在p队列中,是为了维持q队列中的k个数*/ p.push(a[b1++]); while(!q.empty()&&p.top()<q.top()) {/*保证p中的数都比q中的数大,否则交换*/ int x=q.top(); q.pop(); q.push(p.top()); p.pop(); p.push(x); } cout<<p.top()<<endl; q.push(p.top());/*把第k小的数放入q中,保持q的个数*/ p.pop(); } return 0; }
相关文章推荐
- DIV+CSS检测技巧和应用
- Curve Bezier
- function&bind原理总结。
- HDOJ 1859 最小长方形
- Java进阶03 IO基础
- 第六周上机实践项目-项目4-静态成员应用
- jsp常用指令
- Android学习系列(三)四大组件之Service详解
- java中修饰符的分类及其可修饰范围
- CCF认证-出现次数最多的数
- 解决 mysql 启动报错--发现系统错误2,系统找不到指定的文件
- 深入理解Java内存模型——volatile
- 最大子数组问题及其变形
- 斐波那契数列
- JS 事件深入
- MySQL数据库端字符集设置
- Java @Override注解
- 单链表的应用3(链表排序输出)
- java集合汇总-Map-Set-HashMap等的区别与联系<未完待续>
- CodeForces 19A World Football Cup