- 博客(5)
- 资源 (2)
- 收藏
- 关注
原创 单调队列
单调队列是一种严格单调的队列,可以单调递增,也可以单调递减。队首位置保存的是最优解,第二个位置保存的是次优解,ect。。。 单调队列可以有两个操作:1、插入一个新的元素,该元素从队尾开始向队首进行搜索,找到合适的位置插入之,如果该位置原本有元素,则替换它。2、在过程中从队首删除不符合当前要求的元素。 单调队列实现起来可简单,可复杂。简单的一个数组,一个head,一个tail
2014-01-14 11:22:26 785
原创 HDU 3474 Necklace
又是一个单调队列的题目,这个比前面的就多了点优化,不过还是搞了好久,错了不知道多少。。。太水了。。。题意是:告诉一个有字母C和字母J组成的长度不大于1e6的环行排列,现在从某个地方断开,由此向前或者向后,如果可以使得其中之一满足任何时刻数的的C不小于J.那么就成合法的切开位置,求合法的位置的数目。思路:先将环行的排列展开,在展开的地方在续上一个展开串,使之和环行排列等价。 然后以任意位
2014-01-14 11:20:05 900
原创 POJ 2823 Sliding Window
这是一个很明显的单调队列问题,数据有100万,如果用其他的方法就很有可能超时。。。求最大值和最小值所以要有两个单调队列一个球最大值,一个球最小值。。 其实单调队列里面只有最优值和次优值有用(感觉其他值基本可以忽略),所以直接去值就可以了。。。 最大队列保证队列中各个元素大小单调递减(即,最大元素在对头,最小的在队尾)。这样便保证队首元素最大,而且更新的时候队首永远是当前
2014-01-13 11:42:00 772
原创 HDU 3415 Max Sum of Max-K-sub-sequence
其实这是第一个单调队列的题目吧!!之前看了这个知识点的资料不是很懂,可见这个题目做的纠结,后面是参考了讨论区,才AC后面也不是很懂吧,看了很久。。 序列是环状的,所以可以在序列后面复制一段(或者复制前k个数字)。如果用sum[i]来表示复制过后的序列的前i个数的和,那么任意一个子序列[i..j]的和就等于[j]-s[i-1]。对于每一个j,用s[j]减去最小的一个s[i](i>=j
2014-01-12 21:19:29 724
原创 优先队列知识点
在STL里有这个priority_queue,实现优先队列的结构。在优先队列中,优先级高的元素先出队列。优先队列(priority queue)是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除。在最小优先队列(min priorityq ueue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大
2014-01-11 17:05:17 852
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人