$SAM$ + 线段树.
- 先建出 $parent$ 树,按照题意,我们只需要处理 $right$ 集合大小为 $1$ 的节点.
- 如下图,先算出这样的一个节点合法长度的 $max,min$ ( $min$ 可以用 $max(fa)+1$ 计算).
- 那么区域 $I$ 内每个点的贡献就是区域 $II$ 的长度加上这个点到区域 $II$ 的距离.
- 区域 $II$ 内每个点的贡献就是区间 $II$ 的长度.开两颗线段树分别修改就可以了.
1 |
|
夢はここに 思い出は遠くに
$SAM$ + 线段树.
1 | #include<bits/stdc++.h> |