[题解]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)\) 做法。这样写容易被卡常,可以调一下莫队的参数(但是跑得还挺快的?)

代码

posted @ 2021-08-23 19:44  ZSH_ZSH  阅读(59)  评论(0)    收藏  举报