mygr main()
后缀数组
搜索
后缀数组
发表于
2077-03-02
|
更新于
2025-03-06
|
浏览量:
Trick
统计不同的子串数量,可以用每个后缀的长度减去每个 h[i] 求得
. LCP有两种求法,你知道嘛
SA/SAM 朴素求
前缀[[哈希]]+二分(可搭配主席树)
文章作者:
my9r
文章链接:
http://example.com/2077/03/02/%E7%AE%97%E6%B3%95/%E5%90%8E%E7%BC%80%E6%95%B0%E7%BB%84/
版权声明:
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议。转载请注明来源
mygr main()
!
算法
上一篇
反射容斥
可用于求 [[卡特兰数]] 只能向右或向上,求不能经过两条直线到达某点的方案数 #under_construction
下一篇
后缀自动机
子串定位 当已知其为原字符串的一部分时,可以在建图的同时得出 $S[1;r]$ 在SAM上的对应节点,求 $S[l;r]$ 时就在 $S[1;r]$ 的基础上向上跳 $fail$ ,直到跳到长度对应为止,用倍增优化此过程 另外可以使用 [[DAG链剖分]] 求解
相关推荐
2077-03-02
AC自动机
当字符集较大时,可以考虑使用可持久化数组维护 ch 数组 AC自动机上判断某串的子串,考虑枚举前缀然后跳 $fail$ ,可以考虑建出 $fail$ 树,然后在走前缀的过程中用数据结构或连边建图表示出包含关系 # birthday
2077-03-02
BSET定理
相关链接:[[矩阵树定理]],[[欧拉回路]] 对于一个有向图,对于它的欧拉回路个数 $ec(G)$ ,有 $$ec(G)=root_{w}(G)\sum_{v\in V}(deg_v -1)!$$其中 $root_w(G)$ 表示以 $w$ 为根的 $G$ 的外向生成树有多少种 注意BEST定理计算的是两点间若干条边有顺序的方案数,如果是 “某条边能够经过的次数” 则应当除去 $\frac{1}{w!}$ 将顺序消掉 例题: # Counting Prefixes # C4
2077-03-02
DAG链剖分
对于 DAG 上的节点,设 $f_{u}$ 表示以点 $u$ 为结束点的路径数,$g_u$ 表示从点 $u$ 开始的路径数,那么对于节点 $u$ 的所有出边,若存在一条边 $u \rightarrow v$ 使得 $2f_{v}>f_{u},2g_{v}>g_{u}$ ,那么我们则称 $u,v$ 是一条重边 对于任意一条路径,其路径上的轻边数量一定是 $O(logn)$ 级别的,因为每走一次轻边路径数都会折半 最常用的场景是在 [[后缀自动机]] 上快速的子串定位 为什么不倍增跳呢? #under_construction
2077-03-02
KD-Tree
本质:将一个 $k$ 维的立方体内的点压缩到序列上 $O(n^{1-\frac{1}{k}})$ 个不相交区间 而这个序列就可以用正常方法去维护了 例题:# P6783 Ynoi2008 rrusq
2077-03-02
Kmp
kmp的fail数组既可以指最长的前后缀长度,也可以指当前位的最长的前缀匹配,也可以指最长的循环节长度 #under_construction 字符串的所有前缀中,有多少个可以构成形如 “ABABA” 由 k 个A 组成的字符串 通过不断跳fail的方式可以求出最短的前缀匹配,可以通过继承优化到 $O(n+m)$ 例子
2077-03-02
RMQ问题
考虑一个 $O(n)$ 预处理,$O(1)$ 查询的 RMQ 算法 考虑将序列按照 $logn$ 进行分块,对于不在一个同块内部的询问,我们用ST表维护整块的信息,再额外维护块内的前后缀最大值即可 对于在一个块内的查询,我们可以开一个单调栈维护一个前缀的单调下降序列,每一位使用一个整数状压单调栈内拥有的元素,查询 $l,r$ 时直接找 $r$ 对应的单调栈中第一个 $\ge l$ 的位置即可
my9r
Just the owner of this blog
文章
157
标签
15
分类
0
Follow Me
公告
This is my Blog
目录
1.
Trick
最新文章
文化课专栏
2077-03-02
AC自动机
2077-03-02
BSET定理
2077-03-02
DAG链剖分
2077-03-02
KD-Tree
2077-03-02
搜索
数据加载中