[NOI2016]优秀的拆分 后缀自动机 树上启发式合并 线段树

[NOI2016]优秀的拆分

题目传送门
luogu
bzoj

分析

这道题不管采用Hash,后缀数组还是自动机,网上大部分的题解都采用了关键点+调和级数这个操作。本蒟蒻想不到关键点这个操作,所以采用的是一种较为繁琐的 O ( n l o g 2 ) O(nlog^2) O(nlog2)做法。

首先肯定将问题转化成对于每个 i i i求以 i i i为边界的 A A AA AA结构个数,当然前缀后缀分别求一遍,以下默认是前缀。

考虑形式化这个问题,对于某个前缀 i i i,求所有的前缀 j ( j &lt; i ) j(j&lt;i) j(j<i),使得 i , j i,j i,j的最长公共后缀的长度大于 j − i j-i ji,也就是 ∣ { j ∣ j &lt; i , i − j ≤ ∣ L c s ( S 1 , j , S 1 , i ) ∣ } ∣ |\{j|j&lt;i,i-j\le |Lcs(S_{1,j},S_{1,i})|\}| { jj<i,ijLcs(S1,j,S1,i)}

对于后缀前缀的问题,我们一般将他们放到后缀自动机的 p a r e n t parent parent树上考虑,由于后缀自动机的 p a r e n t parent parent树相当于是将每个前缀逆序插入 T r i e Trie Trie,所以某两个前缀的 L c s Lcs Lcs对应的就是他们 p a r e n t parent parent树上的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值