
单调栈&单调队列
linkfqy
A link to FQY.
展开
-
【单调队列】51nod 1275 连续子段的差异
题面在这里单调队列的经典题……发现一个合法的区间的所有子区间都是合法的那么枚举右端点,维护最小的左端点相当于每次加入一个值,然后右移左端点,使得区间内的差值≤k\le k如何快速获取最大/最小值?维护两个单调队列就好了示例程序:原创 2017-08-08 15:56:30 · 1128 阅读 · 1 评论 -
【单调栈】BZOJ1007 [HNOI2008]水平可见直线
题面在这里A水题ing……多画几个例子,就会发现,其实要我们维护一个类似下凸壳的东西 果断对斜率由小到大排序然后就会发现,对于3条直线i,j,ki,j,k满足ki<kj<kkk_i<k_j<k_k 若xi,k≤xi,jx_{i,k}\le x_{i,j}则j一定被k所覆盖然后就开个单调栈维护即可示例程序:原创 2017-07-11 13:37:05 · 636 阅读 · 0 评论 -
【单调栈】Codeforces 601B Lipshitz Sequence
题面在这里单调栈裸题……可以发现一个很显然的结论:L(h)L(h)只会从相邻两个位置得到具体证明可以把L(h)L(h)看作斜率然后每个子序列的权值就是Max{|ai−ai−1|}Max\{ |a_i-a_{i-1}|\}把ai−ai−1a_i-a_{i-1}看成did_i,用一个单调栈维护就好了因为询问只有100,所以每次询问可以直接O(n)O(n)搞。示例程序:原创 2017-08-09 22:18:47 · 856 阅读 · 0 评论 -
【分治计数|单调栈】51Nod 1215 数组的宽度
题面在这里用单调栈分别维护maxmax和minmin的”势力范围”显然很好做其实分治的话就更简单了只需要记录mxmx和mnmn以及它们的前缀和就好了分类讨论一下,这是分治计数的核心示例程序:分治计数:原创 2017-09-21 21:50:34 · 646 阅读 · 0 评论 -
【单调栈】51Nod 1423 最大二“货”
题面在这里考虑枚举区间的次大值。那么可以维护一个递减的单调栈,里面都是可能的最大值然后第一个比当前大的值就是区间的最大值,更新答案就好了倒过来再做一次示例程序:原创 2017-10-27 20:34:45 · 697 阅读 · 0 评论 -
【单调栈】51Nod 1349 最大值
题面在这里最大值相关题目求控制区间已经是很明显的套路了啊喂枚举当前点为区间的最大值,用单调栈求出范围,两边一乘就好了示例程序:原创 2017-10-28 21:15:47 · 795 阅读 · 0 评论 -
【单调队列】BZOJ 1047 [HAOI2007]理想的正方形
题面在这里很显然可以使用单调队列。先只考虑正方形的行限制,处理出每个位置的最大/小值然后对最大/小值再刷一次单调队列,得到含有列限制的答案示例程序:原创 2017-11-02 21:38:51 · 784 阅读 · 0 评论