【思路】

建立一个小堆和一个大堆。大堆用来存放第1..index-1大的数,其余数存放在大堆,小堆的堆顶元素便是我们要求出的第index大的数。每次插入一个A(n),必须保证大堆中数字数目不变,故先插入小堆中。若此时小堆堆顶小于大堆堆顶,则交换堆顶元素;每次Get(),输出小堆的堆顶元素,并将它并入大堆中。

【易错点】

Get()的While循环必须放在插入之后进行判断,否则若放在插入之前写作 while (j<N && u[j]==i),当不再插入A(n)时,剩下的Get()将不再执行,导致WA。

 #include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int MAXN=;
int A[MAXN];
int u[MAXN];
int M,N; int main()
{
scanf("%d%d",&M,&N);
for (int i=;i<M;i++) scanf("%d",&A[i]);
for (int i=;i<N;i++) scanf("%d",&u[i]);
priority_queue< int,vector<int>,less<int> > maxHeap;//index..最后
priority_queue< int,vector<int>,greater<int> > minHeap;//1..index-1
int j=;
for (int i=;i<M;i++)
{
minHeap.push(A[i]);
if (!maxHeap.empty() && maxHeap.top()>minHeap.top())
{
int temp1=maxHeap.top();maxHeap.pop();
int temp2=minHeap.top();minHeap.pop();
maxHeap.push(temp2);
minHeap.push(temp1);
}
while (j<N && u[j]==i+)
{
cout<<minHeap.top()<<endl;
maxHeap.push(minHeap.top());
minHeap.pop();
j++;
}
}
return ;
}

【优先队列】POJ1442-Black Box的更多相关文章

  1. poj-1442 Black Box(Treap)

    题目链接: Black Box 题意: 给一个序列,m个询问,每个询问是求前x个数中的第i小是多少; 思路: Treap的入门题目;Treap能实现STL的set实现不了的功能,如名次树(rank t ...

  2. POJ-1442 Black Box,treap名次树!

                                                      Black Box 唉,一天几乎就只做了这道题,成就感颇低啊! 题意:有一系列插入查找操作,插入每次 ...

  3. poj1442 Black Box

    The Black Case 好啊! 首先,读题很艰难... 读完题,发现是求第k小的数,那么我们用splay水过对顶堆水过即可. #include <cstdio> #include & ...

  4. POJ1442 Black Box 堆

    用大根堆和小根堆分别存放前$i-1$大的元素前$k-i$小的元素. 将当前序列的元素压入最小堆,如果最小堆的最小数大于最大堆的最大数则进行交换,保证最大堆中的所有数小于最小堆. 因为$i$值每进行一次 ...

  5. 初识Treap

    Treap,简单的来说就是Tree+Heap,是一颗平衡树,每个节点有两个信息:1.key:当前节点的关键字 :2.fix:当前节点优先级.key满足二叉排序数的性质,即左儿子都比当前节点小,右儿子都 ...

  6. A - Black Box 优先队列

    来源poj1442 Our Black Box represents a primitive database. It can save an integer array and has a spec ...

  7. Black Box《优先队列》

    Description Our Black Box represents a primitive database. It can save an integer array and has a sp ...

  8. [ACM] POJ 1442 Black Box (堆,优先队列)

    Black Box Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7099   Accepted: 2888 Descrip ...

  9. Black Box POJ1442

    Description Our Black Box represents a primitive database. It can save an integer array and has a sp ...

随机推荐

  1. mysql中的时间year/date/time/datetime

    year: mysql> create table y(y year); Query OK, 0 rows affected (0.03 sec) mysql> desc y; +---- ...

  2. linux编程之共享内存

    linux 进程间通信(IPC)包括3种机制:消息队列.信号量.共享内存.消息队列和信号量均是内核空间的系统对象,经由它们 的数据需要在内核和用户空间进行额外的数据拷贝:而共享内存和访问它的所有应用程 ...

  3. ktime使用例子【原创】

    #include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#include ...

  4. 很重要的处理项目url[www]

    http://www.xdowns.com/soft/10/57/2013/Soft_113319.html https://github.com/TricksterGuy/Morphan http: ...

  5. 前趋图和PV操作

  6. dotnet core多平台开发体验(mac os x 、windows、linux)

    前言 随着net core rc2的发布,园子里面关于net core的入门文章也也多了起来,但是大多数都是在一个平台上面来写几个简单的例子,或者是在解释代码本身,并没有体现说在一个平台上面创建一个项 ...

  7. hrbust - 2239

    影子模仿术 Time Limit: 500 MS Memory Limit: 32768 K Total Submit: 7(5 users) Total Accepted: 2(2 users) R ...

  8. hdu 1133(卡特兰数变形)

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1133   题意:排队买50块一张的票,初始票台没有零钱可找,有m个人持有50元,n人持有100元, ...

  9. 玩转RaspberryPi

    step1:烧制树莓派内存卡 可以用[Linux系统烧制]http://www.williamsang.com/archives/1764.html 如果用windows烧制的话,就用Win32 Di ...

  10. 对于mysql加索引,删除索引,添加列,删除列,修改列顺序的最佳办法测试

    1.首先进行数据训的XltraBackup备份,有备无患,切记切记! 2.mysql -uroot -pD******** -- 导出csv文件 use dsideal_db; MariaDB [ds ...