标签:主席树 第一次用 二分 比较 覆盖 并且 二分答案 字符 很多
将所有差分之后串连起来,求$height$,二分答案转化为是否存在一段连续的区间使得这个区间中的$height$全部大于二分的值并且覆盖所有串。
这题做法非常多。。。第一次用AC自动机暴力水过,顺便颓了题解,然后现在又做了一边就知道标签了。。
比较方便的做法是后缀数组+莫队,将所有串连在一起之后对于每个点名串的起始点二分求出一段区间,使这段区间中的$height$全部大于等于这个点名串长度,之后可以转化为区间数颜色问题,可以用很多方法,然而莫队可以在数颜色的同时顺便维护出第二问,所以比较好打。
$height$对长度取min让我们非常不爽,所以二分答案去掉长度的限制,然后仍然二分出包含$rk[c]$的一段连续区间,使$height$大于等于二分长度,主席树检验当前二分区间是否有在这个范围内的$rk$即可。
求出$height$数组,用单调栈求出每个$height$作为最小值的区间,累加答案即可。
一个结论:一个排名为i的后缀能够提供的本质不同子串数:$n-sa[i]-height[i]+1$,并且这些子串的排名按照后缀的排名递增。应该不难理解。
于是可以二分出第$k$个子串的位置,求$lcp$,$lcs$就完了。
几乎和差异一毛一样。。。就是多了个最大权值,$ST$表查一下就完了。
标签:主席树 第一次用 二分 比较 覆盖 并且 二分答案 字符 很多
原文地址:https://www.cnblogs.com/hzoi-cbx/p/12088033.html