单调栈
y_immortal
蒟蒻蒟蒻
展开
-
洛谷4248 AHOI2013差异 (后缀数组SA+单调栈)
题目链接补博客!首先我们观察题目中给的那个求ansansans的方法,其实前两项没什么用处,直接forforfor一遍就求得了for (int i=1;i<=n;i++) ans=ans+i*(n-1);那么我们考虑剩下的部分应该怎么求解!首先这里有一个性质。对于任意两个后缀i,ji,ji,j,他们的lcplcplcp长度是他们对应的rankrankrank之间的heighthe...原创 2018-12-12 19:20:25 · 142 阅读 · 0 评论 -
洛谷3181 HAOI2016找相同字符 (SA+单调栈)
题目链接QWQ好自闭的题目!一个题解都看不懂!!!!貌似这种求ansansans的代码实现是全网第一个?QWQ总之我没有见过类似的啊。首先这个题,我们这么考虑。由于是两个串,很自然的想到把第二个串拼到第一个串的后面,然后中间添加一个非法字符。那么我们应该怎么求呢?首先想一个复杂度不是那么优秀的做法。我们可以直接暴力枚举任意两个后缀,一个属于A串,另一个属于B串,他们的lcplc...原创 2018-12-13 15:31:25 · 151 阅读 · 2 评论 -
洛谷1950 长方形 (单调栈)
懒得放题目链接了qwq(果然我是菜的真实,单调栈都不会,gg)首先我们看到这个题。应该会想到就是直接枚举行,然后计算当前行的答案。那现在,对于每一行来说,如果我们能够维护出h[j]h[j]h[j]表示第jjj列的最近的一个不合法的位置。那么实际上就是求一堆矩形的并的一个图形中。有多少个矩形。首先考虑暴力,我们可以直接枚举每一列,然后枚举他前面的列进行计算,这个复杂度是O(n3)O(...原创 2018-12-21 00:43:01 · 236 阅读 · 0 评论 -
P3722 [AH2017/HNOI2017]影魔 (单调栈+线段树+离线)
这个题的思路还是很巧妙的。sro hjq orzsro Creed orz首先,我们来考虑题目中给出的两个条件,由于都是跟最大值有关系,所以我们可能会想到,首先运用单调栈求出来每一个数左边第一个比他大的数的位置和右边第一个比他大的数的位置l[i],r[i]l[i],r[i]l[i],r[i]for (int i=1;i<=n;i++) a[i]=read(); l[1]=1;...原创 2019-03-22 14:47:01 · 210 阅读 · 0 评论 -
CF1117G Recursive Queries (线段树+单调栈)
这个题的思路和影魔的是大致上类似的。首先我们会发现,对于题目中的f(l,r)f(l,r)f(l,r)函数,实际上就是求区间内每个值作为最大值的区间,与当前区间的交的长度总和。那么我们不妨用和影魔一样的思路,对于原来的询问拆成两个询问,在l−1l-1l−1的时候减去[l,r][l,r][l,r]的贡献,然后再rrr处再加回来。定义l[i],r[i]l[i],r[i]l[i],r[i]分别表示左...原创 2019-03-22 21:30:36 · 285 阅读 · 0 评论