LOJ6041
题意
给定一个01串,多次查询以\([l,r]\)结尾的前缀,设为\(pre_i\),求\(max_{i,j,i\neq 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\)
然后就是一个二维平面求最大值的问题了

浙公网安备 33010602011771号