![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单调栈
Nightmare丶
登高必自卑,行远必自迩
展开
-
BZOJ 1113: [Poi2008]海报PLA(单调栈)
DescriptionN个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们.Input第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 PosteringOutput最少数量的海报数.题解:经典的单调栈题目,海报的向后延伸一定是以最低的边缘为上界的,所以扫到和栈顶元素相等的就可以节省...原创 2020-01-01 17:38:24 · 199 阅读 · 0 评论 -
P3181 [HAOI2016]找相同字符(后缀数组+单调栈)
题意:给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。题解:首先我们想到从A,B两个串中选择两个子串相同肯定不好选,但我们可以用容斥,先计算出A和B拼接在一起的总的子串相同的方案数,再减去两个都在A中选,和两个都在B中选的情况,求解方案数时可以用单调栈求出。单调栈:处理到 排名为 i的串的时候,如果栈顶的heig...原创 2019-11-23 00:34:32 · 142 阅读 · 0 评论 -
POJ 3415 Common Substrings(后缀数组+单调栈)
题意:求两个字符串长度不小于k的公共子串个数题解:计算A的某个后缀与B的某个后缀的最长公共前缀长度,如果长度L大于k,应加上L-k+1组还是将两个字符串用连起来,中间用分隔符隔开,然后利用后缀数组求出h数组分组,若某组内的h都是大于等于k的,那么扫描一遍遇到一个B的后缀就和之前的A后缀进行统计,这种做法肯定是不行的,因为已经是O(n2)O(n^2)O(n2)由后缀数组性质容易发现两个后缀...原创 2019-11-22 18:44:44 · 117 阅读 · 0 评论 -
BZOJ 3879: SvT(后缀数组+单调栈)
题目链接题解:求出后缀数组,然后用单调栈求出该区间作为区间最小值时的左右边界即可。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 5e5+50;int n,Q,m=26;int rk[MAXN],sa[MAXN],y[MAXN],c[MAXN],...原创 2019-11-16 02:45:18 · 110 阅读 · 0 评论