[题解]CF666E

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

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

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

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

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

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

代码

posted @   ZSH_ZSH  阅读(51)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示