优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序
每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。
例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高
所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。
用法:
示例:将元素5,3,2,4,6依次push到优先队列中,...
分类:
其他好文 时间:
2015-03-16 16:35:59
阅读次数:
159
做道水题凑凑题量,=_=||。直接用STL里的queue、stack 和 priority_queue模拟就好了,看看取出的元素是否和输入中的相等,注意在此之前要判断一下是否非空。 1 #include 2 using namespace std; 3 4 void scan( int &x ).....
分类:
其他好文 时间:
2015-03-15 16:46:00
阅读次数:
122
Rescue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18493 Accepted Submission(s): 6606
Problem Description
Angel was caught b...
分类:
其他好文 时间:
2015-03-10 21:29:43
阅读次数:
129
懒省事的小明
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述 小明很想吃果子,正好果园果子熟了。在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。小明决定把所有的果子合成一堆。 因为小明比较懒,为了省力气,小明开始想点子了:
每一次合并,小明可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。...
分类:
其他好文 时间:
2015-03-10 00:12:22
阅读次数:
164
二叉堆,是一个满二叉树,满足堆的性质。即父节点大于等于子节点(max heap)或者是父节点小于等于子节点(min heap)。二叉堆的如上性质常用于优先队列(priority queue)或是用于堆排序。
由于max heap 与min heap类似,下文只针对min heap进行讨论和实现。
如上图,是根据字母的ASCII码建立的最小堆。
我们用数组对满二叉树采用宽度优先遍历存储...
分类:
编程语言 时间:
2015-03-07 15:41:40
阅读次数:
178
链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1613
Description :
小z身处在一个迷宫中,小z每分钟可以走到上下左右四个方向的相邻格之一。迷宫中有一些墙和障碍物。
同时迷宫中也有一些传送门,当小z走到任意一个传送门时,可以选择传送到其他任意的传送门(传送是不花费...
分类:
其他好文 时间:
2015-03-07 14:09:42
阅读次数:
175
题意: 有m(m#include #include using namespace std;struct node { int p, val; bool operator val; }} tem;priority_queue ql;int ans[1009];int n, m,...
分类:
其他好文 时间:
2015-03-07 13:50:15
阅读次数:
119
1.heap
heap不属于STL容器组件,它是priority queue的底层实现机制。
(1)push_heap算法
向堆中加入元素,首先将要加入的元素放到堆所在数组的末端,然后再对这个元素进行上溯操作,直到新堆合法为止。如下图所示:
(2)pop_heap算法
pop_heap操作取走堆中的最大(小)值。根据堆的特性,堆的最大(小)值必定是堆所存...
分类:
其他好文 时间:
2015-03-06 16:35:21
阅读次数:
165
“蛇和梯子”是一个在NXN的(0
方格从1到N的平方编号。除了第1号和最后编号的方格,其它的格子都有可能有蛇或梯子存在(蛇和梯子的数量及具体位置由输入确定,它们的数量都在100之内并且蛇和梯子不能临近放置,也就是在任何了放置两者首尾的方格之间至少还有一个未放置任何东西的格子)。开始的时候玩家把他们的标志物放在1号格子中。玩家轮流以扔骰子的方式移动他们的指示物。如果一个指示物到达了一条蛇的...
分类:
其他好文 时间:
2015-03-03 16:40:57
阅读次数:
141
题意:给定一个长度为n的序列,依次求出(i,i+k-1) (i∈(0,n-1),i
本题有多种解法。首先,暴力的时间复杂度是O((n-k)*klogk),所以pass。
解法1:维护一个单调递增的队列(手写),队头即为最小值。同理求出最大值。
解法2:维护一个优先队列(priority_queue即可)
解法3:线段树
这里给出单调队列解法:
#include
#inc...