单调栈
Icefox_zhx
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
poj3415Common Substrings(后缀数组+单调栈)
题目大意:给两个字符串,求所有满足 长度大于等于k的公共子串 的对数。 思路:基本的,计算A 的所有后缀和B 的所有后缀之间的最长公共前缀的长度, 把最长公共前缀长度不小于k 的部分全部加起来。(显然会TLE到死),所以我们把这两个串连起来(中间用特殊字符隔开),根据h数组进行分组,保证一组内字符串之间lcp都是大于等于k的。接下来的工作便是快速的统计每组中后缀之间的最长公共前缀之和。扫描一遍原创 2017-07-17 14:36:08 · 427 阅读 · 0 评论 -
Wannafly挑战赛18
https://www.nowcoder.com/acm/contest/129#question A.序列(组合数学) -2和0.5一样多,且都为偶数,枚举一下具体个数就好了 O(n)O(n)O(n) 考时ZZ了,不会跳了过去…很久以后才A掉gg B.随机数(矩阵快速幂) 设f[i]表示前i个数有奇数个1的概率,则 f[i+1]=f[i]∗(1−p)+(1−f[i])∗pf[i+1...原创 2018-06-22 23:09:24 · 390 阅读 · 0 评论 -
bzoj4709 [Jsoi2011]柠檬(贪心+dp+决策单调性+单调栈)
问题就是把这个序列分成若干段,使得每段的贡献和最大。 首先我们贪心地发现每段的起终位置一定相同(否则分出去更好) 于是有dp,f[i]表示前i个的最大贡献。枚举i这一段的起点j,一定满足a[i]==a[j],记c[i]表示i及i之前出现了多少个a[i] f[i]=maxj=1i{f[j−1]+a[i]∗(c[i]−c[j]+1)2|a[j]==a[i]}f[i]=maxj=1i{f[j−1]...原创 2018-06-21 15:12:42 · 410 阅读 · 0 评论 -
bzoj4237 稻草人(cdq分治+单调栈)
#include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 200010 inline char gc(){ static char buf[1<<16],*S,*T; if(S==T){T=(S=buf)+fread(...原创 2018-05-15 23:29:33 · 424 阅读 · 0 评论 -
bzoj1007 [HNOI2008]水平可见直线(单调栈+维护下凸壳)
我们发现最终可见直线一定是构成了一个下凸壳,因此我们可以按k从小到大排序,用单调栈维护一个下凸壳。 注意斜率相等的直线,我们肯定是取b最大的那条。原创 2018-03-28 09:47:38 · 581 阅读 · 0 评论 -
bzoj1057 [ZJOI2007]棋盘制作(dp+单调栈)
首先dp处理出每个位置在一行上的往后延伸的最长距离。 然后一列列的做。相当于求一个极大子矩形。可以用单调栈来做。 类似这题:portal原创 2018-04-10 16:25:21 · 262 阅读 · 0 评论 -
bzoj3940 [Usaco2015 Feb]Censoring(ACAM+栈)
题目大意:给定文本串S,n个模式串。要求从S中依次删去出现的模式串。建出ACAM,直接用栈来模拟即可。原创 2018-03-23 22:14:32 · 443 阅读 · 0 评论 -
NOIP模拟9.23(TYVJ NOIP2017模拟赛D1)
T1 回形遍历 T2 排列 T3 近似排列计数原创 2017-09-27 11:23:40 · 789 阅读 · 0 评论 -
bzoj3238 [Ahoi2013]差异(SA+单调栈求所有区间最小值和)
我们很明显可以直接预处理出来T(i)+T(j)的总和,为n* (n-1)*(n+1)/2(推一下样例就可以了),然后主要问题是处理lcp的和。 这个地方我们可以直接在height数组上搞,我们可以发现,每一对(i,j)都对应了h数组上的一段区间、甚至是点!(当i,j两个子串rank相连的时候)那么同样的,每一个height数组上的一段区间(点)也对应我们要求的一个LCP。这样我们就不再关心是谁和谁原创 2017-08-24 21:59:47 · 952 阅读 · 2 评论 -
bzoj3039 玉蟾宫(单调栈)
给定一个01矩阵,求最大1矩阵面积。类似poj2559,只不过是没有给定那条底线。我们可以枚举以第x行为底,得出每一列的高,始终更新答案。复杂度是O(n2)O(n^2),详见poj2559.原创 2017-08-13 23:32:00 · 567 阅读 · 0 评论 -
poj2559 Largest Rectangle in a Histogram (单调栈)
用单调栈维护高度,使得栈内高度递增,每次一个高度h出栈时说明以h为高的这个矩阵不可能再延伸了,我们就计算出这个矩阵的大小,更新ans。还要注意维护宽度,比如进来的是高度h,为此删掉了3个点,则这3个点一定都比h高,第四个点就没有h高了,也就不能再向左延伸,则h向左延伸的最大长度也就是这3个点的宽度和了,而向右延伸的最大宽度则是在这个点出栈时已经删掉的点的宽度和(这个点出栈,说明遇到了比他小的高度,不原创 2017-08-13 23:04:40 · 543 阅读 · 0 评论 -
bzoj1012 [JSOI2008]最大数(单调栈+二分/线段树)
线段树维护区间最大值或者单调栈权值递减,二分查位置。。。单调栈显然更快一些。。。线段树版原创 2017-08-11 22:34:41 · 415 阅读 · 0 评论 -
bzoj2216 [Poi2011]Lightning Conductor(决策单调性+分治/二分+单调栈)
化简一下就是求ans[i]=max{aj+|i−j|−−−−−√}−a[i]ans[i]=max{aj+|i−j|}−a[i]ans[i]=max\{a_j+\sqrt{|i-j|}\}-a[i] 我们把绝对值去掉,正着倒着各做一遍即可。 现在只考虑<i<ijjj 设k1<k2<ik1<k2<ik_1ak1+i−k1−−−−−√<ak2+i−k2−−原创 2018-07-02 21:56:10 · 786 阅读 · 0 评论
分享