随笔分类 - 后缀数组
摘要:"传送门" 这个题就是求 $n$ 个差分数列的最长公共子串,为啥是差分数列呢,因为如果一个串都加一个数会变成另一个串,那么这两个串的差分数列除了第一项都相等。 所以把 $n$ 个串的差分数列除去第一项后用不同的数间隔然后拼起来,对应位置打上标记记录属于哪个串,然后求后缀数组。 那么如何求 $n$ 个
阅读全文
摘要:"传送门" 用后缀数组写这个题太反智了,因为是 $O(n^2)$ 的统计答案,所以要用单调栈来做优化,比广义后缀自动机麻烦太多了,这个题就是广义后缀自动机的板子题。 由此可见后缀数组还是处理单字符串或者处理多字符串的长度问题好用一些,这种处理多字符串的方案统计问题就算了 后缀数组代码
阅读全文
摘要:"传送门" 回来复习一下后缀数组,感觉之前不理解的地方突然都能理解了 w using namespace std; const int N=1e5+10; char s[N]; int n,m,sa[N 2],rk[N 2],c[N],tp[N 2],ht[N 2],ans; void getsa(
阅读全文
摘要:"传送门" 题意 给 $2\times N$个主串,$2$ 个一组,和 $M$ 个模式串 计算包含每个模式串的主串组的个数,每个主串包含多少个模式串 思路 先将所有串拼起来,用特殊符号间隔,并且标记每个属于主串的后缀 走一遍后缀数组之后,对于每个询问,找到对应的区间 然后把这些区间来做莫队, 计算包
阅读全文
摘要:"传送门" 题意 计算两个字符串的最长公共子串 思路 将问题转化为找两个后缀的最长公共前缀 将两个字符串拼接在一起,用' '隔开,然后走一个后缀数组,利用 $height[i]$ 更新答案, 要注意两个后缀不能在一个串里面,所以要记录' '分割符的位置,在更新答案之前看 $sa[i]$ 和 $sa[
阅读全文
摘要:"传送门" 思路 走一遍后缀数组后,可以发现要求的就是与 $rk[i]$ 的 $lcp\geq r l+1$ 的这段区间的数中第 $k$ 大的 $sa$ 值 那么可以构建好主席树后,二分找出要求区间,然后再主席树上找第 $k$ 大的值就完成了这道题 为了搞这道题我啃了好久的后缀数组,做出了题后才发现
阅读全文
摘要:"模板题" 学了很久,算是解决了一块心病, 虽然大致能理解,但现在也只是停留在写模板的程度 存个模板先
阅读全文

浙公网安备 33010602011771号