后缀数组
文章平均质量分 52
QAQQQQQQQQQQQ
菜
展开
-
【模板】后缀排序
模板题学习后缀数组的基础就是后缀排序啦先说一下变量:最重要的两个sa和rksa和rksa和rk数组:sa[i]表示排名为i的位置sa[i]表示排名为i的位置sa[i]表示排名为i的位置rk[i]表示位置i的后缀的排名rk[i]表示位置i的后缀的排名rk[i]表示位置i的后缀的排名sa[rk[i]]=rk[sa[i]]=isa[rk[i]]=rk[sa[i]]=isa[rk[i]]=rk...原创 2018-11-25 23:27:57 · 1350 阅读 · 0 评论 -
后缀数组+调和级数--bzoj2119: 股市的预测
传送门其实就是复杂度是调和级数…首先差分一下就变成了找到形如abaabaaba的串的个数,暴力求的话就是n2lognn^2lognn2logn的,可以枚举aaa的长度,然后把串分成一段一段的,只计算每段的第一个点,从第一个点lll找到对应的r=l+len+mr=l+len+mr=l+len+m,然后看l,rl,rl,r能同时向左右延伸到哪里,也就是后缀lcplcplcp和反串后缀lcplcpl...原创 2018-12-27 12:00:46 · 240 阅读 · 0 评论 -
后缀数组+二分+莫队--luoguP2336 [SCOI2012]喵星球上的点名
(树状数组那么好写我为什么要写莫队 雾)传送门后缀数组就不说了···然后对于每一个询问也插入序列,他的答案是一个lcp≥lenlcp\ge lenlcp≥len区间,可以二分出来,然后就变成区间内问不同数字的个数,这就是裸莫队了···第二个问题的话可以一边莫队一边计算,记录每个数字上一次出现的位置,然后把这一段的和加上细节好多的···因为后面询问没有用特殊数字隔开wa了好久还有莫队排序那...原创 2018-12-27 00:01:58 · 215 阅读 · 0 评论 -
后缀数组+主席树--bzoj4556: [Tjoi2016&Heoi2016]字符串
传送门可以先二分答案midmidmid,判断[a,b−mid+1][a,b-mid+1][a,b−mid+1]是否有lcp(rk[i],rk[c])≥midlcp(rk[i],rk[c])\ge midlcp(rk[i],rk[c])≥mid的iii,这个是一个区间,可以再用二分+ststst表O(1)O(1)O(1)查询找出来,然后用主席树判断[a,b−mid+1][a,b-mid+1][a,...原创 2018-12-07 11:41:36 · 225 阅读 · 0 评论 -
后缀数组+二分--bzoj4698: Sdoi2008 Sandy的卡片
传送门差分一下,去掉首项,然后二分一个长度看连续的一段大于这个长度的heightheightheight是否能包含所有nnn个序列代码如下:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define...原创 2018-12-07 09:09:45 · 181 阅读 · 0 评论 -
后缀数组+平衡树--luoguP4070 [SDOI2016]生成魔咒
传送门首先有一个结论:一个串中本质不同的子串个数为n×(n+1)2−∑i=1nheight[i]\frac{n\times(n+1)}{2}-\sum_{i=1}^nheight[i]2n×(n+1)−∑i=1nheight[i]因为正着考虑的话每次要加很多个后缀,不好维护,所以可以把序列倒过来看,每次加一个字符相当于加一个后缀,那就可以先预处理出整个序列的heightheighthei...原创 2018-12-05 22:19:28 · 185 阅读 · 0 评论 -
后缀数组+二分--luoguP2852 [USACO06DEC]牛奶模式Milk Patterns
传送门二分答案,然后后缀数组里再用二分判断,同luoguP3649#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define maxn 20005#define maxm 1000005using...原创 2018-12-03 16:29:46 · 152 阅读 · 0 评论 -
后缀数组+单调栈+set--bzoj4453: cys就是要拿英魂!
传送门好题!!!介于是一道权限题所以我就粘题面吧···Descriptionpps又开始dota视频直播了!一群每天被pps虐的蒟蒻决定学习pps的操作技术,他们把pps在这局放的技能记录了下来,每个技能用一个字符表示。经过研究,蒟蒻们发现字典序更大的连招威力更大。于是所有蒟蒻都想学习pps最强的连招。但是他们太弱了,不能学会整个视频里的连招,只能学会陈老师一段区间间内的连招,可是这个...原创 2018-12-07 21:43:30 · 205 阅读 · 0 评论 -
(假的)后缀数组--bzoj4319: cerc2008 Suffix reconstruction
传送门这其实是一道假的后缀数组233考查的其实是对后缀数组的理解quq#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define maxn 500005using namespace std;...原创 2018-12-07 21:29:45 · 198 阅读 · 0 评论 -
后缀数组--luoguP2408 不同子串个数
传送门求本质不同的子串个数,是HDU4622的弱化版方法也是求出hhh数组,以排名为顺序遍历每个后缀,让ans+=ans+=ans+=后缀长度−-−它和之前所有后缀的lcplcplcp代码如下:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#...原创 2018-12-02 21:26:12 · 209 阅读 · 0 评论 -
后缀数组+二分+--luoguP3649 [APIO2014]回文串
传送门首先回文子串可以用manachermanachermanacher求出来,并且可以知道开头和长度,那么问题就转化成求一个子串在原串中出现了多少次。这个可以用SAMSAMSAM求(但我还不会于是就用了SASASA,首先把hhh数组求出来,那么结合ststst表就可以O(1)O(1)O(1)求出一个后缀和另一个后缀的lcplcplcp,这样看起来是n2n^2n2的复杂度,但因为lcp(i,...原创 2018-11-26 17:55:40 · 175 阅读 · 0 评论 -
后缀数组+单调栈--luoguP3181 [HAOI2016]找相同字符
传送门可以把两个字符串通过一个特殊字符连起来然后后缀数组求出hhh想到一个n2n^2n2做法,这个其实就是要求对于s2s2s2中的每个后缀,求其和s1s1s1的每个后缀的lcplcplcp然后加起来,用hhh数组和ststst表就能办到复杂度浪费在了枚举s2s2s2的后缀上,但根据lcp(i,j)=mini+1≤k≤j(h[k])lcp(i,j)=min_{i+1\le k\le j}(h[...原创 2018-11-26 13:19:29 · 157 阅读 · 0 评论 -
后缀数组(lcp)+st表-hdu4622
hdu4622后缀数组基础题?昨天学了后缀排序其实最有用的是后缀数组求lcplcplcp?用了一个height[i]=lcp(sa[i],sa[i−1])height[i]=lcp(sa[i],sa[i-1])height[i]=lcp(sa[i],sa[i−1]),也就是排名为iii的和排名i−1i-1i−1的后缀的lcplcplcp为了方便,设h[i]=height(rk[i])h[i...原创 2018-11-26 10:02:41 · 712 阅读 · 1 评论 -
后缀数组+单调栈--poj3415 Common Substrings
传送门时隔多年(其实也就几天 )我终于把这道题A了就是用普通的后缀数组结合单调栈,加了个&gt;k&gt;k>k的限制,和[HAOI2016]找相同字符思路差不多,但有一些细节比如h[i]h[i]h[i]是和上一名的lcplcplcp,所以有些判断要−1-1−1之类的一直被多组数据坑···s[n+1]s[n+1]s[n+1]一定要置000代码如下:#include&...原创 2018-12-12 08:35:42 · 217 阅读 · 0 评论