CF666E

同学们都用 (SAM) 过了,那我发一个 (SA) 的题解

考虑使用 (SA) 的流氓做法,把所有串拼在一起

容易发现符合条件的子串满足 (lcp(x,pl)geq (r-l+1)) ,即 (rk) 上连续的一段

二分找出每个询问的左边界和右边界,问题就转化为了一个区间众数问题

可以使用经典的 (O(n sqrt n )- O(sqrt n)) 区间众数求法

我这里偷懒,写了个莫队+线段树的 (O(q sqrt n log m)) 做法。这样写容易被卡常,可以调一下莫队的参数(但是跑得还挺快的?)

代码

原文地址:https://www.cnblogs.com/ZHANG-SHENG-HAO/p/15177467.html