单调栈
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[POJ2559]Largest Rectangle in a Histogram(单调栈)
汝当衣锦归,否则莫还乡。原创 2016-04-14 19:58:47 · 466 阅读 · 0 评论 -
[BZOJ2086][Poi2010]Blocks(单调栈)
题目描述传送门题解题意实际上是要求平均值>=k的最长区间。 这种区间平均值的题有一种特别的技巧,即如果平均值为k,那么将每一个数减去k,然后求前缀和。如果一段区间满足sr−sl>=0s_r-s_l>=0,那么它的平均值即是>=k的。 那么对于每一个k做这样的处理,问题就转化为了求满足sr−sl>=0s_r-s_l>=0的最长区间[l,r]。 可以发现如果i>ji>j且si>sjs_i>s_j的原创 2016-11-11 23:03:50 · 730 阅读 · 0 评论 -
[POJ3415]Common Substrings(后缀数组+单调栈)
题目描述传送门 题意:给定两个字符串 A 和 B ,求长度不小于 k 的公共子串的个数(可以相同)。题解首先把一个串接在另一个串的后面,中间放一个没出现过的字符。 由于每一个子串都是某一个后缀的前缀,求出sa和height了之后,我们可以将height分组,组内都是height>=k的后缀。可以知道长度不小于k的公共子串是两个后缀的前缀,并且它们一定在同一组内。 那么对于每一组,从前往后扫,假原创 2016-12-26 21:20:13 · 1907 阅读 · 0 评论 -
[BZOJ3879]SvT(后缀数组+单调栈)
题目描述传送门题解求出sa和height 把每一组询问的子串按照rank排序,顺序枚举每一个后缀,每一个后缀的贡献就应该为它与它前面的所有后缀的lcp之和 维护一个单调递增的栈、栈中每一个元素的数量以及栈中元素和就可以了代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmat原创 2017-01-11 14:39:03 · 1004 阅读 · 0 评论 -
[BZOJ3190][JLOI2013]赛车(计算几何+单调栈)
题目描述传送门题解一辆赛车行驶的路程就是v*t+k 看成一条条直线就是水平可见直线那道题了… 按照斜率排序之后用单调栈维护,每一次计算交点然后判断是否覆盖就行了 最后栈中且和下一条直线交点的横坐标>=0的直线是合法的坑点: 判断平行直线,选b最大的 判断重合直线,栈中只能保留一条,最后输出的时候将所有的全部输出 (不能直接在维护的时候打标记,因为有可能在以后弹出) 题面说得很清楚,只要原创 2017-02-16 20:45:49 · 745 阅读 · 0 评论 -
[BZOJ1414][ZJOI2009]对称的正方形(manacher+单调栈+二分)
题目描述传送门题解跟这道题gang了半晚上,写出来了一个理论复杂度O(n2log2n)O(n^2log^2n)的做法,然后各种剪枝各种砍常数,最后竟然A了… 网上题解貌似是二分+hash?好像也有用manacher+单调队列并且时间复杂度科学的方法,不过各种看不懂…首先我们参考manacher的做法,将一些分隔符插入矩阵,来处理奇数偶数 并且对于每一个点都求出来它横纵的最长回文子串 然后枚举对原创 2017-01-11 20:17:28 · 1239 阅读 · 0 评论 -
[BZOJ3235][Ahoi2013]好方的蛇(单调栈+容斥原理)
题目描述传送门题解heheda管这叫小学生容斥 首先求出以某一个点为左上角、左下角、右上角、右下角的矩形的数量 这个没法dp,但是可以直接用一个单调栈求出来。预处理出某一个点向上向下最远延伸到的长度,单调栈中的每一个点都是能组成矩形的合法顶点 然后枚举每一个点(i,j),以这个点为左上角的矩形可以和除去i..n,j..n范围内的矩形配对,这样利用右下角矩形数量的二维前缀和加加减减能得到答案原创 2017-03-23 07:39:41 · 1052 阅读 · 0 评论 -
[BZOJ3238][Ahoi2013]差异(后缀数组+单调栈||后缀自动机+树形dp)
题目描述传送门题解这道题实际上还是非常有趣的。 首先根据题目的描述答案应该为所有后缀的组合长度再减去两两的lcp 首先算出来总和 求出sa和height,用两次单调栈可以求出来以某一个点的height为最小值的最长区间 可以发现以这个点为分界点,区间的左右两边两两组合最小值一定是当前点的height,也就是lcp的长度 然后再计算答案就可以了代码#include<iostream>#in原创 2016-12-28 10:00:50 · 821 阅读 · 0 评论 -
[BZOJ4237]稻草人(cdq分治+单调栈+二分)
题目描述传送门题解对x排序了之后按照x分治,每一次对y排序 考虑如何处理左区间里的点对右边的点的影响,也就是如何计算左边和右边配对的情况 用两个指针扫的时候,如果左边的连续一段区间里的点想要都和右边的某一个点配对的话,必须满足x单调递减 而右边的区间的某一个点如果要是想和左边的点配对的话,只能是y在 它和第一个x在它左边的点 所确定的y的范围内的点 对于左边的点维护一个x单调递减的栈,对右边原创 2017-03-24 21:59:51 · 801 阅读 · 0 评论 -
[BZOJ3401][Usaco2009 Mar]Look Up 仰望(单调栈)
题目描述传送门题解单调栈裸题。 维护单调递减的栈,每一个点的右边只会被第一个 比它大的点更新。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005int n,top;int stack[N],h[N],r[N];void push(int x){ whi原创 2016-11-11 23:08:16 · 619 阅读 · 0 评论 -
单调栈 学习笔记
单调栈相对来说比较简单,那就简单写一下。有些题目的单调栈只是一个“单调的栈”而已,是根据题目的性质维护了一个单调的栈实现一些查询操作。但是单调栈更常见的一种用处是维护以每一个点为最大值/最小值的最长的区间是多少。举个栗子:1 2 1 1 5 如果要求以每一个点为最小值的区间的话,答案应为[1,5][2,2][1,5][1,5][5,5]由于每一个点的左右端点都只会被左边/右边第一个大于/小于它的点原创 2016-11-11 19:49:30 · 867 阅读 · 0 评论 -
[BZOJ1683][Usaco2005 Nov]City skyline 城市地平线(单调栈)
只为他放弃一座城池、在天光大亮的时候、奔赴一场或生或死的未知。原创 2016-05-11 21:56:43 · 978 阅读 · 0 评论 -
[BZOJ1007][HNOI2008]水平可见直线(单调栈+计算几何)
无论如何困难,不可求人怜悯。原创 2016-05-11 23:00:14 · 761 阅读 · 0 评论 -
[BZOJ1113][Poi2008]海报PLA(单调栈)
人生就是一场对种种困难无尽无休的斗争,一场以寡敌众的战斗。原创 2016-05-02 23:28:38 · 666 阅读 · 0 评论 -
[BZOJ1345][Baltic2007]序列问题Sequence(单调栈)
往事依稀浑似梦,都随风雨到心头。原创 2016-05-02 23:50:50 · 748 阅读 · 0 评论 -
[BZOJ1660][Usaco2006 Nov]Bad Hair Day 乱发节(单调栈)
一个人要坚强的活下去,是很难的吧。原创 2016-05-03 08:01:07 · 755 阅读 · 0 评论 -
[BZOJ3956]Count(单调栈+线段树)
如果你想拥有你从未有过的东西,那么你必须去做你从未做过的事情。原创 2016-08-20 12:24:05 · 1042 阅读 · 0 评论 -
[BZOJ1657][Usaco2006 Mar]Mooo 奶牛的歌声(单调栈)
想战胜心里的不安,也是很辛苦的吧。原创 2016-05-03 09:28:37 · 1200 阅读 · 0 评论 -
[poj2796]Feel Good(单调栈)
永远不是一种距离,而是一种决定。原创 2016-02-02 20:21:20 · 1046 阅读 · 0 评论 -
[BZOJ1178][Apio2009]CONVENTION会议中心(单调栈+dp+set)
题目描述传送门题目大意:有一些线段,两两之间不能相交,求:最短选出多少条线段;输出所有可选的方案中字典序最小的。题解这题并没有做出来。。。这道题的关键在于一个性质:令get_ans(l,r)表示在区间[l,r]内最多能选出多少条合法的线段,那么如果现在要判断线段[l0,r0]是否能加入,就是要判断是否get_ans(l,r)=get_ans(l,l0-1)+get_ans(r0+1,r)+1,其中l原创 2017-04-27 16:27:12 · 1166 阅读 · 0 评论