稀疏表
DZYO
Never stop
展开
-
bzoj3230: 相似子串(后缀数组+ST表)
题解:后缀数组+稀疏表 对原串正反向建后缀数组并通过height数组求出本质不同字符串个数。 通过ST表预处理后可在O(1)时间内求出LCQ。代码:#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<cmath>原创 2017-04-04 20:03:30 · 361 阅读 · 0 评论 -
BZOJ4516: [Sdoi2016]生成魔咒(后缀数组)
传送门 给一个串,分别求[1,r] , r=1,2,3,4….,n的不同子串个数。 题解:后缀数组先把串反转,其实就是求每一个后缀的不同子串个数。依次从后往前加入后缀,一个后缀能产生的不同子串个数为这个后缀的长度减去与它的排名前一名的后缀的长度,维护前缀即可。每次插入一个后缀t,设它排名前一个后缀为p,后一个后缀为s。因为之前插入s或t后缀时必然会减去最长公共前缀,因此,答案先加上lcp(p,s原创 2017-08-26 19:24:53 · 348 阅读 · 0 评论 -
NOIP模拟:字符串(后缀数组)
给定两个字符串 s1 和 s2 ,两个字符串都由 26 个小写字母中的部分字母构成。现在需要统计 s_2 在 s_1 中出现了的次数。 对于 s1 中的每个位置 i ,设 strlen(s2)=mstrlen(s2)=m ,若: ∑j=1m[s1[i+j−1]!=s2[j]]≤k\sum_{j=1}^{m}[s_1[i+j-1]!=s_2[j]]\le k (最外层中括号为布尔表达原创 2017-11-09 18:20:01 · 382 阅读 · 0 评论 -
BJ模拟:string(后缀数组+Trie+ST表+分块)
给定一个长度为mm的01串AA,nn个长度为LiL_i的01串BiBi(总长为LL)。另有一个长度为nn的序列cic_i,表示BiB_i被选中1次的代价。要求将A划分成若干个串,并为每个划分出来的子串找一个BkiB_{k_i}(kik_i可以重复,重复代价算多次),满足此子串是BkiB_{k_i}的前缀或后缀。求最小总代价,如果不存在这样的划分,输出−1-1。 为了造福群众,把数据放出来吧:http原创 2017-12-19 21:48:22 · 601 阅读 · 0 评论 -
BZOJ4538: [Hnoi2016]网络(树上路径交+整体二分)
传送门 题解: 对于一个询问我们二分他的答案kkk,那么只用判断所有大于kkk的路径的交集是否包含即可。 可以考虑整体二分,直接把路径一起往线段树上放,询问直接在线段树上二分就行了。 维护树上路径交可以做到 O(1)O(1)O(1) ,具体可以看这里。 也可以直接用树状数组做路径加然后查询标记数, 不过时间复杂度会多一个lognlogn\log n。 用STSTST表维护LCALC...原创 2018-02-28 16:09:39 · 609 阅读 · 0 评论