
单调栈
Nightmare丶
登高必自卑,行远必自迩
展开
-
BZOJ 1113: [Poi2008]海报PLA(单调栈)
Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering Output 最少数量的海报数. 题解: 经典的单调栈题目,海报的向后延伸一定是以最低的边缘为上界的,所以扫到和栈顶元素相等的就可以节省...原创 2020-01-01 17:38:24 · 225 阅读 · 0 评论 -
P3181 [HAOI2016]找相同字符(后缀数组+单调栈)
题意: 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。 题解: 首先我们想到从A,B两个串中选择两个子串相同肯定不好选,但我们可以用容斥,先计算出A和B拼接在一起的总的子串相同的方案数,再减去两个都在A中选,和两个都在B中选的情况,求解方案数时可以用单调栈求出。 单调栈: 处理到 排名为 i的串的时候,如果栈顶的heig...原创 2019-11-23 00:34:32 · 158 阅读 · 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 · 135 阅读 · 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 · 122 阅读 · 0 评论