题目链接
做法
一眼看过去,这不是$SAM$模板题吗。
再一眼,什么,还有插入和修改,那好吧,换个做法。
$LCQ$和我们熟知的$LCP$本质上是一样的,有一个经典做法就是二分+哈希。
所以我们可以用一棵平衡树来维护整个序列的哈希值。
具体做法:
以在序列中的位置作为关键字构建平衡树
平衡树的每个节点维护他子树的哈希值,实际上就是序列一段的哈希值。
令右子树的$size$为$R$
$hash[u]=hash[lson[u]]base^{R+1}+data[u]base^R+hash[rson[u]]$
这样当我们想要查询一段区间的哈希值时只要把整段区间从平衡树里拿出来就好了。
插入和修改用平衡树可以实现。
代码
1 |
|