CF587F Duff is Mad

  • 给定 n 个字符串 s1n
  • q 次询问 slrsk 中出现了多少次。
  • n,q,i=1n|si|105

  字符串 根号分治

  首先,建立 AC 自动机。

  考虑暴力,就是将 slr 的在 AC 自动机的终止节点的子树权值 +1,然后答案就是 sk 在 AC 自动机上面对应路径的权值之和。

  考虑差分之后扫描线,我们只要支持求将 s1cur 的终止节点子树权值 +1 后,sk 在 AC 自动机上面对应路径的权值之和了。

  然后复杂度是 O(max{|Si|}qlog2L) 的,其中 L=|Si|

  本来想使用树链剖分进行进一步优化的,但是因为 AC 自动机的路径在 Fail 树上不连续,因此我们只能暴跳然后求和。

  但是我们可以根据字符串长度考虑根号分治

  具体地,对于 |sk|B,我们可以将这些串对应的询问单独拿出来,然后将 sk 在 AC 自动机上面对应的路径权值 +1,然后在对于每个 i,求出如果 i[l,r]si 对于 sk 的答案的贡献,这个只要在树上面 DFS 然后前缀和即可求解,总复杂度 O(L2B)

  对于 |sk|<B,直接使用暴力,总复杂度就是 O(qBlog2L)

  根据均值不等式,当 B=Lqlog2L 的时候复杂度最优,为 O(Lqlog2L)

  代码

  当然,如果第一部分写丑了直接树状数组多了个 log2,那么也是可以调整块长然后通过的:代码

posted @   Werner_Yin  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示