题意:
给出一个字符串,有q次询问,每次询问一个子串 S [ l , r ] S[l,r] S[l,r]最长的border,即最大的 t < r − l + 1 t<r-l+1 t<r−l+1,满足 S [ l , l + t − 1 ] = S [ r − t + 1 , r ] S[l,l+t-1] = S[r-t+1,r] S[l,l+t−1]=S[r−t+1,r]。
题解1:
复杂度 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)
对于询问 S [ l , r ] S[l,r] S[l,r],要寻找一个最大的 p ∈ [ l , r − 1 ] p\in[l,r-1] p∈[l,r−1],且满足 S [ 1 , p ] S[1,p] S[1,p]和 S [ 1 , r ] S[1,r] S[1,r]的 L C P > p − l LCP>p-l LCP>p−l。
进一步,使用后缀树,两个串的LCP对应于两个点的LCA。即设 L C A ( S [ 1 , p ] , S [ 1 , r ] ) = x LCA(S[1,p],S[1,r]) = x LCA(S[1,p],S[1,r])=x,那么要满足 L e n ( x ) > p − l Len(x) > p-l Len(x)>p−l,也就是 L e n ( x ) + l > p Len(x) + l > p Len(x)+l>p。
那么题解是要做这样一件事情:离线,然后按照询问的右端点排序,当遇到一个询问 S [ l , r ] S[l,r] S[l,r]的时候,找到 S [ 1 , r