
后缀数组
Lifel
dcoi 蒟蒻一枚 欢迎交流~~~qq:1627767186
展开
-
两道模版题 UOj 35 和 bzoj1036
后缀数组排序树剖后缀数组排序:#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespac原创 2017-08-11 15:09:10 · 281 阅读 · 0 评论 -
poj1745(后缀数组+二分)
题目大意:求最长的不重叠重复字串的最大值思路:二分最长的长度L,然后按照height>=L分组,可以得出每一个L都会在同一组内,而这组sa[i]max-sa[i]min>=L 则成立 这题输入的细节比较多需要注意(我会说我T了)#include<set>#include<map>#include<ctime>#include<queue>#include<cmath>#include<c原创 2017-08-14 19:16:52 · 354 阅读 · 0 评论 -
poj 3261 (后缀数组+二分)
题目大意:求可重复的出现k次的串的最大长度 思路:这都是套路题了,二分长度L,按照height值分组,在同一组内的组数如果大于K,则成立。PS:a[i]<=20000 本来以为基数排序为T,结果1A,也是醉了#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#defin原创 2017-08-14 20:54:30 · 329 阅读 · 0 评论 -
SPOJ 705
题目大意:求一个字符串中本质不同的串的多少 思路:显然任意一个字串都可以看成一个后缀的前缀。那么对于一个新加入的后缀sa[i]来说,它能够产生的贡献是w[i]=n-sa[i]+1,但其中height[i]的前缀是与sa[i-1]重复,所以 w[i]=n-sa[i]+1-h[i] ans=n*n(n-1)/2-h[i](1 to n)#include<iostream>#include<c原创 2017-08-14 21:38:59 · 316 阅读 · 0 评论 -
bzoj 3238 Ahoi2013 后缀数组+单调栈
题目链接 思路:先不看lcp部分,若只有len[i] 则ans=(n−1)×∑ni=1ans=(n-1)\times\sum_{i=1}^n 然后就变成了一个跑后缀数组得到height值+RMQ的题目 等等……枚举的时间复杂度为O(n^2)明显超时,那么我们需要在O(n)或者O(nlog)的时间内处理出区间的最小值,注意我们并不需要知道具体的每一个区间是多少,只用知道总值就可以了~~ 我们原创 2017-08-15 18:46:31 · 368 阅读 · 0 评论 -
poj 2774 后缀数组
题目大意:求最长公共前缀 思路:这种公共字串问题一般都是将后面的串插到前面上去,然后搞事情Orz 这题就这样咯,只要两个不在一个串内即一个为A串,一个为B串,答案为满足条件的height值的最大值 PS:小技巧:用一个比较大的值插入到中间,根据sa值判断是否在一个串中 还有数据只有一组 最重要的数组要开到2e5以上 TLE和RE的血泪教训啊o_O#include<iostream>#i原创 2017-08-16 07:24:46 · 291 阅读 · 0 评论