pku1442 Black Box
2010-06-11 18:37
204 查看
用优先级队列做的,由于一个细节问题,贡献了N次的RE
问题就是要求动态的查询第 k小的数,k由1开始递增
做法是用两个优先级队列 (也可以说是堆),一个最大优先级队列,一个最小优先级队列
由于是求第k小的数,所以每次查询的时候保持最大堆有有前k小的数就行了 然后返回qMax.top()
为了提取这前k小的数,所以我们一开始把数加入到qMin中,由qMin来返回前k小的数
要注意的一点是,队列为空的时候调用 top() 就会出现RE了 我就是因为这个RE了好几次
代码:
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
int num[30010];
int main()
{
int n,m;
while (EOF!=scanf("%d%d",&n,&m))
{
priority_queue<int,vector<int>,greater<int> > qMin;
priority_queue<int> qMax;
int i(0);
while(i<n)
scanf("%d",num+i++);
int x;
int j;
for(i=0,j=0;i<m;++i){
scanf("%d",&x);
while(j<x)qMin.push(num[j++]);
qMax.push(qMin.top()); //保证qMax中有x个数,然后和qMin比较,提取前k小的数
qMin.pop();
if(!qMin.empty()){ //必须保证qMin非空
while(qMax.top()>qMin.top()){
qMax.push(qMin.top());
qMin.push(qMax.top());
qMax.pop();
qMin.pop();
}
}
printf("%d/n",qMax.top()); //输出前k小数中最大者
}
}
return 0;
}
问题就是要求动态的查询第 k小的数,k由1开始递增
做法是用两个优先级队列 (也可以说是堆),一个最大优先级队列,一个最小优先级队列
由于是求第k小的数,所以每次查询的时候保持最大堆有有前k小的数就行了 然后返回qMax.top()
为了提取这前k小的数,所以我们一开始把数加入到qMin中,由qMin来返回前k小的数
要注意的一点是,队列为空的时候调用 top() 就会出现RE了 我就是因为这个RE了好几次
代码:
#include <iostream>
#include <queue>
#include <cstdio>
using namespace std;
int num[30010];
int main()
{
int n,m;
while (EOF!=scanf("%d%d",&n,&m))
{
priority_queue<int,vector<int>,greater<int> > qMin;
priority_queue<int> qMax;
int i(0);
while(i<n)
scanf("%d",num+i++);
int x;
int j;
for(i=0,j=0;i<m;++i){
scanf("%d",&x);
while(j<x)qMin.push(num[j++]);
qMax.push(qMin.top()); //保证qMax中有x个数,然后和qMin比较,提取前k小的数
qMin.pop();
if(!qMin.empty()){ //必须保证qMin非空
while(qMax.top()>qMin.top()){
qMax.push(qMin.top());
qMin.push(qMax.top());
qMax.pop();
qMin.pop();
}
}
printf("%d/n",qMax.top()); //输出前k小数中最大者
}
}
return 0;
}
相关文章推荐
- pku 1442 Black Box 优先队列
- pku 1442 Black Box(优先队列)
- POJ 1442 Black Box
- POJ 1442 Black Box
- POJ 1442 Black Box
- [ACM] POJ 1442 Black Box (堆,优先队列)
- POJ 1442 Black Box 基础Treap
- 【优先队列】POJ1442-Black Box
- poj1442 Black Box【优先队列,定义两个队列】
- Black Box(POJ--1442
- poj-1442 Black Box
- POJ 1442 Black Box(treap树指针实现)
- poj1442——Black Box
- Treap模板——POJ1442——Black Box
- POJ 1442-Black Box(动态区间第K小-优先队列)
- POJ 1442 Black Box (Treap)
- poj 1442 Black Box
- poj 1442 Black Box
- POJ 1442 Black Box(优先队列)
- hdu 1442 Black Box