题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2865 做出 ht[ ] 之后,sa[ ] 上每个位置和它前面与后面取 LCP ,其中较大的长度设为 d ,表示从 sa[ i ] 位置开始的子串的右端点要在 sa[ i ]+d-1 位置之后才 ...
分类:
编程语言 时间:
2018-12-08 17:03:25
阅读次数:
238
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2865 唯一出现的子串就是每个后缀除去和别的后缀最长的 LCP 之外的前缀; 所以用这个更新一段区间的答案,可以用线段树维护; 在 sa[i] ~ sa[i]+LCP+1 位置的答案由 LCP+ ...
分类:
编程语言 时间:
2018-12-08 16:59:25
阅读次数:
213
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3230 作出后缀数组,从 LCP 看每个位置对于本质不同子串的贡献,而且他们已经按前面部分排好序了,所以直接在 sa[ ] 上二分就能找到询问的子串。 找最长公共前缀就用 ht[ ] 和子串的长 ...
分类:
编程语言 时间:
2018-12-07 18:26:03
阅读次数:
170
这篇博客的内容,主要建立于后缀排序的基础之上,进一步研究一个$Height$数组以及如何求$LCP$。 ...
分类:
编程语言 时间:
2018-12-03 21:03:05
阅读次数:
239
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3238 [算法] 首先 , LCP(Ti , Tj) = min{ height[rank[Ti] + 1] , height[rank[Ti] + 2] , ... , height[ ...
分类:
其他好文 时间:
2018-12-01 00:18:05
阅读次数:
160
这道题应该是后缀数组的套路题啊,把单词连接起来,中间用没有出现过且互不相同的字符来分隔开,求一下$height$数组。 对于一个单词来说,设单词长$len$,所在的后缀为$i$,如果某后缀$j$满足$lcp(i,j)==len$,则$j$的前缀与这个单词相等。因为和$i$的$lcp$大小是从$i$向 ...
分类:
其他好文 时间:
2018-11-30 11:16:03
阅读次数:
212
BZO2754: [SCOI2012]喵星球上的点名 "题目链接" 分析: 把姓和名中间用一个分隔符分开,和询问串一起建立后缀数组。 后缀数组上每个位置存对应串的标号。对于一个询问串(T),找到他对应的位置。 考虑和他的lcp =len(T)的位置都是合法的。左右二分/倍增提取出这样的区间。 那么第 ...
分类:
编程语言 时间:
2018-11-25 13:27:36
阅读次数:
167
首先只有lcp(i,j)需要考虑 因为SAM的parent树是后缀的前缀的最长公共后缀(……),所以把这个串倒过来建SAM,这样就变成了求两个前缀的最长公共后缀,长度就是这两个前缀在parent树上的lcs对应的最大长度dis 这里用treedp解决即可,就是合并一下size cpp include ...
分类:
其他好文 时间:
2018-11-23 22:28:49
阅读次数:
226
题意:给一个字符串,多组查询,一些后缀两两的lcp长度和,查询个数和不超过1e6 题解:svt就是后缀虚树,suffix virtual tree,考虑后缀树lca求lcp长度,但是查询次数可能很多,不能每次遍历,所以要建出虚数后在虚树上dp,对于一个节点考虑算贡献,对于所有子树,两两算个数乘积乘上 ...
分类:
其他好文 时间:
2018-11-02 17:59:09
阅读次数:
143
他要求的就是lcp(x,y)>=i的(x,y)的个数和a[x]*a[y]的最大值 做一下后缀和,就只要求lcp=i的了 既然lcp(x,y)=min(h[rank[x]+1],..,[h[rank[y]]]) 那么我们求出来对于每一个h,以它作为最小值的区间的左右端点就可以了,这个可以用单调栈,具体 ...
分类:
其他好文 时间:
2018-10-22 22:21:47
阅读次数:
277