单调栈
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[单调栈] BZOJ 1345 [Baltic2007]序列问题Sequence
单调栈维护 自己体会一下应该问题不大 #include #include #include using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,1000原创 2016-04-18 18:38:04 · 409 阅读 · 0 评论 -
[单调栈 扫描线] BZOJ 4826 [Hnoi2017]影魔
先用单调栈找出比ii大的第一个数lil_i 和 rir_i 然后[i,i+1][i,i+1]有p1的贡献 [li,ri][l_i,r_i]有p1的贡献 [li,x] x∈[i+1,ri−1][l_i,x] \ x\in [i+1,r_i-1] 有p2的贡献 [x,ri] x∈[li+1,i−1][x,r_i] \ x\in [l_i+1,i-1] 有p2的贡献 放在平面上就是点和线段 矩形求原创 2017-04-20 06:54:56 · 884 阅读 · 0 评论 -
[暴力 单调栈] BZOJ 2228 [Zjoi2011]礼物(gift)
这个东西 搞法不一 我是这么搞的 沿着zz轴的方向看 一定是一些重叠的正方形叠在一起 我们对于每一个zz 都对(x,y)(x,y)求出fx,yf_{x,y} 表示最大的以(x,y)(x,y)为右下角的正方形的大小 然后在zz这一维上 大小就是区间最小值 我们用单调栈弄一弄就好了 我写的二分求fx,yf_{x,y} 复杂度O(n3logn)O(n^3\log n) 但是实际上用悬线法可原创 2017-03-13 13:24:45 · 660 阅读 · 0 评论 -
[莫队 单调栈] BZOJ 4540 [Hnoi2016]序列
题解:http://www.cnblogs.com/Ngshily/p/5409337.html 给出一个序列,求某段区间的位置不同子串的最小值之和 对于前4040,我们可以n2n2预处然后O(nn√)O(nn) 预处理中zzz[i][j]zzz[i][j]表示以ii开头,结尾最长到jj的前缀子串的最小值之和 同理fff[i][j]fff[i][j]表示倒过来的情况原创 2016-04-20 16:23:09 · 935 阅读 · 0 评论 -
[分治 || 单调栈 单调队列] 51Nod 1215 数组的宽度
分治 #include #include #include using namespace std; typedef pair abcd; typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,1原创 2016-11-22 14:25:05 · 425 阅读 · 0 评论 -
[决策单调性 分治||单调栈 DP] BZOJ 2739 最远点
决策单调性 用分治或者单调栈 单调栈没打过 尴尬 #include #include #include using namespace std; typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,原创 2016-08-23 18:17:41 · 1030 阅读 · 0 评论 -
[线段树 单调栈] UNR #1 争夺圣杯
争夺圣杯 用单调栈求出left right 可以发现每个点的贡献是关于left right的分段函数 然后就是分段函数累加求和 当时打的线段树 看了题解涨姿势了 可以差分 做到O(n) #include #include #include using namespace std; typedef pair abcd; typedef long long ll; inline原创 2016-07-20 09:18:38 · 657 阅读 · 0 评论 -
[分治 单调栈] BZOJ 4237 稻草人
x排序 考虑分治 左下角在左半边 右上角在右半边 两边各维护一个单调栈 然后左边查询在右边二分 细节自行在代码中领会 #include #include #include #include #define cl(x) memset(x,0,sizeof(x)) using namespace std; typedef long long ll; inline char nc()原创 2016-06-06 07:37:32 · 763 阅读 · 0 评论 -
[单调栈] BZOJ 1113 [Poi2008]海报PLA & BZOJ 1628 [Usaco2007 Demo]City skyline
双倍经验 就是把下面能合并的合并成一张 单调栈维护 1113 #include #include #include using namespace std; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin原创 2016-04-18 18:36:47 · 413 阅读 · 0 评论 -
[Trie树 单调栈] BZOJ 4523 [Cqoi2016]路由表
建一棵字典树,记一下时间 然后就是在字典树上匹配 因为匹配长度是单调增的,所以维护一个时间的单调递增栈 #include #include #include #include #define cl(x) memset(x,0,sizeof(x)) using namespace std; typedef long long ll; inline char nc() { stati原创 2016-04-18 20:32:07 · 599 阅读 · 0 评论 -
[单调栈 线段树] Codeforces 407E Round #239 (Div. 1) E. k-d-sequence
首先肯定是一段模 dd 相同的数 然后枚举左端点 那么右端点应该满足条件 数字不重复出现且 maxvl,r−minvl,r≤r−l+kmaxv_{l,r}-minv_{l,r}\le r-l+k,这个最大最小值是除过 dd 的 也就是maxvl,r−minvl,r−r≤k−lmaxv_{l,r}-minv_{l,r}-r\le k-l 左端点边挪边用单调栈维护最大最小值 入栈出栈就线段树上区间原创 2017-07-05 20:16:13 · 522 阅读 · 0 评论