
单调队列/栈
_duadua
这个作者很懒,什么都没留下…
展开
-
单调队列 和 单调栈
单调队列定义 有一个队列(双端队列), 队列中的元素满足下面四种状态的任何一种都为单调队列: 单调递增 (如 1 2 3 5 9) 单调不减 (如 1 2 3 3 5) 单调递减 (如 9 5 3 2 1) 单调不增 (如 5 3 3 2 1) 性质 (以单增队列为例) 插入时,需要将尾部大于此数的全部出队。 删除时,根据需要使队首或者队尾的元素出队(所原创 2017-08-06 23:42:49 · 598 阅读 · 0 评论 -
POJ - 2823 Sliding Window: 滑动窗口 单调队列
题目点此跳转思路 题目意思是给你一个数组,让你分别求出所有的区间长度为k的区间的最小值和最大值。 Window position Minimum value Maximum value [1 3 -1] -3 5 3 6 7 -1 3 1 [3 -1 -3] 5 3 6 7 -3 3 1 3 [-1 -3 5] 3 6 7 -原创 2017-08-04 10:14:00 · 617 阅读 · 0 评论 -
HDU - 3415 Max Sum of Max-K-sub-sequence : 单调队列
题目点此跳转思路 题目意思是给你一全环形的数组(头尾相接), 求所有长度不大于k的区间中 元素和 最大 的的区间 及 最大的元素和。 区间的和可以使用前缀和相减求出,设sum[i]为从0到i的前缀和, 区间[i, j]的和即为sum[j] - sum[i-1]; 那么对于每一个区间尾j,我们只要求出它前面i个内最小的sum[i]即可,显然单调队列是可以解决的。 每次区间尾j右移时,将j所在元素入原创 2017-08-04 10:44:44 · 345 阅读 · 0 评论 -
HDU - 3530 Subsequence : 单调队列
题目点此跳转思路 题目意思是给你一个数组, 求一个最长的子区间的长度,此子区间要满足一个条件:在此区间内的最大值与最小值的差要在[m, k]范围内。 使用两个单调队列分别维护区间的最大值和最小值。 注意队首元素出队的条件: 当最大值的队首减最小值的队首不满足题目要求时,要将两者下标小的出队, 才能保证区间的连续性。而出队之前下标也要记录一下,表示此区间开始的地方。代码int n, m, k, a原创 2017-08-04 10:55:49 · 321 阅读 · 0 评论 -
POJ - 3017 Cut the Sequence : 单调队列优化dp
题目点此跳转思路 题目意思是给你一个数组, 现在让你将整个数组划分为几个子区间,并且要保证每个子区间的元素和不大于M, 求 每个子区间的最大值 的和 的最小值。 这是一道dp题, 单调队列的一个很大的应用就是可以优化某一类dp。 我们先将它当作一个纯dp题去写状态转移方程,之后再考虑使用单调队列优化。 设 f(i) 为数组A[1, , i]满足条件的每个子区间的最大值的和 的最小值, 则要求的结原创 2017-08-04 15:03:45 · 577 阅读 · 1 评论 -
HDU - 1506 Largest Rectangle in a Histogram: 单调栈入门题
题目点此跳转思路 题目意思是有一个由许多矩形组成的一个图形(下底对齐), 求这个图形里能找到的最大矩形的面积, 输入的是各个矩形的高度。 例如下图 很显然,这一题就是要求对于每一个矩形而言,它往左或右最多的比他高的矩形的个数, 也就是说,对于输入的那个数组,我们只要求出每一个元素能往左右延伸到什么地方即可,延伸的定义是不比它小的才行。 使用单调栈是解决这个问题的一个很好的办法。 我们维护一个原创 2017-08-06 22:14:25 · 436 阅读 · 0 评论 -
入门经典_Chap08_题解总结:极角扫描法 滑动窗口 单调队列 单调栈
bulabula原创 2017-08-06 23:50:28 · 535 阅读 · 0 评论