您的位置:首页 > 其它

poj1442——Black Box

2011-03-14 09:26 274 查看
题目很难理解:向一个容器中不断的添加n个数,然后有一系列查询,每次查询第i小的数并进行输出.

刚开始就一个最小堆,果断超时了。

后来,搜了报告,原来,是用最大与最小堆之间动态维护。保证前i小个数一定留在max堆里。

话说,stl是好东西,代码简洁。但比手动的慢。优缺点同样明显。
http://archive.cnblogs.com/a/1900652/-------->手动维护堆!
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
#define maxn 30003
int A[maxn],u[maxn];
priority_queue<int ,vector<int >,greater<int >>minheap;
priority_queue<int ,vector<int >,less<int >>maxheap;
int main()
{
int i,j;
int m,n,flag;
cin>>m>>n;
for(i=1;i<=m;i++)
scanf("%d",&A[i]);
for(i=1;i<=n;i++)
scanf("%d",&u[i]);
j=1;u[0]=0;int k;
for(i=1;i<=n;i++)
{
while(j<=u[i])
{
maxheap.push (A[j]);
j++;
}
for(k=u[i]-u[i-1];k>0;k--)
{
minheap.push (maxheap.top ());
maxheap.pop ();
}
printf("%d/n",minheap.top ());
maxheap.push (minheap.top ());
minheap.pop ();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: