两天了,终于把这题调出来了(
一堆沙雕错误……
看见后缀的 LCP,第一反应当然是 SA 啦!
于是考虑求出 SA 和 height 先。
众所周知题目中定义的 LCP(i,j)=rankrmini=rankl+1heighti。
这让我联想到了 Beautiful Pair 那一题的套路——以区间最值进行分治,又称为「启发式分裂」。
即,对于 height 数组分治。并在分治的时候,取最值所在点为中点,然后枚举中点以左 / 以右两段中长度较短的一段,并用数据结构取得另一段对应的答案。
对于此题应当使用可持久化 Trie。
于是就很套路了,但我还调了这么久……
代码:
1 |
|