LOJ6041

题意

给定一个01串,多次查询以([l,r])结尾的前缀,设为(pre_i),求(max_{i,j,i eq j}{LCP(pre_i,pre_j)}),其中(LCP)为最长公共后缀

做法一

建出后缀树,一开始节点内存的东西为空

考虑从左往右枚举(r),祖先(x)对答案的贡献就是:设(l)(x)子树内最大值,(Query(1..l,r)=len_x)
(r)放在该点

这个可以用(lct,bit)进一步优化到(O(nlog^2n))

做法二

线段树合并求出每个位置的(right),一个位置(i)对答案的有效贡献为:左右两侧较近的(right)

然后就是一个二维平面求最大值的问题了

原文地址:https://www.cnblogs.com/Grice/p/12443231.html