后缀数组
SC.ldxcaicai
我很菜=_=
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2018.11.24 loj#111. 后缀排序(后缀数组)
传送门 后缀排序模板题。 终于会后缀数组了(然而只会倍增并不会DC3DC3DC3)。 在这里列举几个数组的意思: sai:sa_i:sai:当前排名第iii的后缀的起始下标。 rkirk_irki当前下标为iii的后缀对应的排名。 sa2isa2_isa2i当前排名为iii的第二关键字对应的下标。 代码: #include<bits/stdc++.h> #define ri r...原创 2018-11-24 11:46:12 · 249 阅读 · 0 评论 -
2018.11.24 poj1743Musical Theme(二分答案+后缀数组)
传送门 代码: 二分答案。 然后对于预处理的heightheightheight数组分成几段。 保证每一段中都是连续的几个heightheightheight并且这些heightheightheight都不小于二分的值。 然后查询是否有一个段中两个长度的差满足条件就行了。 #include<iostream> #include<cstdio> #define ri regi...原创 2018-11-24 11:50:43 · 334 阅读 · 0 评论 -
2018.11.24 poj3693Maximum repetition substring(后缀数组)
传送门 后缀数组好题。 考虑枚举循环节长度lenlenlen。 然后考虑枚举循环节的起点来更新答案。 但是直接枚举每次O(n)O(n)O(n)。 考虑枚举len∗k+1len*k+1len∗k+1作为起点。 然后用len∗(k−1)+1len*(k-1)+1len∗(k−1)+1和len∗k+1len*k+1len∗k+1之间的某一段有可能使循环节长度再加一。 代码: #include<i...原创 2018-11-24 11:54:53 · 225 阅读 · 0 评论 -
2018.11.24 poj3261Milk Patterns(后缀数组)
传送门 后缀数组经典题。 貌似可以用二分答案+后缀数组? 我自己yyyyyy了一个好写一点的方法。 直接先预处理出heightheightheight数组。 然后对于所有连续的k−1k-1k−1个heightheightheight的最小值取最大值即可。 代码: #include<iostream> #include<cstdio> #include<algorit...原创 2018-11-24 14:28:51 · 187 阅读 · 0 评论 -
spoj New Distinct Substrings(后缀数组)
传送门 双倍经验(弱化版本) 考虑求出来heightheightheight数组之后用增量法。 也就是考虑每增加一个heightheightheight对答案产生的贡献。 算出来是∑∣S∣−heighti+1−sai\sum|S|-height_i+1-sa_i∑∣S∣−heighti+1−sai 代码: #include<bits/stdc++.h> #define ri reg...原创 2018-11-24 14:31:55 · 162 阅读 · 0 评论 -
poj2774Long Long Message(后缀数组)
传送门 实际上可以用后缀自动机秒掉 当然后缀数组也挺好写。 我们将两个字符串接在一起,为了方便中间用一个特殊字符连接。 然后对新字符串求heightheightheight数组。 求出来之后对所有满足sai,sai−1sa_i,sa_{i-1}sai,sai−1属于两个不同字符串的heightheightheight取最大值就行了。 代码: #include<iostream> #...原创 2018-11-24 14:35:05 · 183 阅读 · 0 评论 -
poj3415Common Substrings(后缀数组+单调栈)
传送门 常数实在压不下来(蒟蒻开O(3)都过不了)。 但有正确性233. 首先肯定得把两个字符串接在一起。 相当于heightheightheight数组被height&lt;kheight&lt;kheight<k的分成了几段,统计每段的贡献。 考虑段中每个heightheightheight作为最小值出现的次数就行了。 于是我们用单调栈求出每个位置向左右分别能延展到的最远...原创 2018-11-24 21:19:40 · 261 阅读 · 0 评论 -
spoj220 Relevant Phrases of Annihilation(后缀数组+二分答案)
传送门 代码: 先用特殊字符把所有字符串连接在一起。 然后二分答案将sasasa数组分组。 讨论是否存在一个组满足组内对于每一个字符串都存在两段不相交字串满足条件。 #include<bits/stdc++.h> #define ri register int using namespace std; const int N=2e5+5; int n,m,rk[N],ht[N],sa[...原创 2018-11-30 18:54:48 · 251 阅读 · 0 评论 -
bzoj3230: 相似子串(后缀数组)
传送门 后缀数组入门题。 建立正反两个后缀数组算就行了。 代码: #include<bits/stdc++.h> #define ri register int using namespace std; typedef long long ll; const int N=2e5+5; int n,m,q,sa2[N],Log[N],cnt[N]; ll num[N]; char s[N...原创 2018-11-30 21:23:25 · 221 阅读 · 0 评论 -
poj3294 Life Forms(后缀数组+双指针)
传送门 后缀数组经典题目。 我们先把所有的字符串都接在一起。 然后求出hththt数组和sasasa数组。 然后对于sasasa数组跑双指针统计答案。 如果双指针包括进去的属于不同字符串的数量达到了题目给出的限制我们就更新答案并不断右移左指针。 如果没有达到限制就一直右移右指针。 代码: #include<iostream> #include<cstdio> #includ...原创 2018-11-28 17:42:09 · 220 阅读 · 0 评论 -
bzoj3879: SvT(后缀数组+单调栈)
传送门 思路:可以用无脑的后缀数组+单调栈维护,当然也可以选择samsamsam+虚树。 代码: #include<bits/stdc++.h> #define ri register int using namespace std; typedef long long ll; const ll mod=23333333333333333,N=1e6+5; inline int rea...原创 2019-06-26 17:04:31 · 293 阅读 · 0 评论 -
bzoj4453: cys就是要拿英魂!(后缀数组+单调栈+set)
传送门 stOstOstO 神题 OrzOrzOrz 题意: 给定一个串S,有Q个询问,每次问一个区间内字典序最大的子串。 |S|,Q<=10^5,可以离线! 大佬的题解: 代码: #include<bits/stdc++.h> #define ri register int #define fi first #define se second using namespace ...原创 2019-07-13 22:58:03 · 283 阅读 · 0 评论 -
bzoj4698: Sdoi2008 Sandy的卡片(二分答案+后缀数组)
传送门 听说数据水??? 其实这题更水好吧 题意: 求nnn个数字串的最长公共子串长度。 两个子串相同的定义为:两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串 思路: 假如没有那个定义,把所有字符串拼在一起建一个SASASA,中间用特殊字符连接,然后二分答案+双指针checkcheckcheck就完了。 废话 现在考虑如何转化相等这个条件。 假设两个串为a1,a2,...,aka_1...原创 2019-07-17 20:22:48 · 214 阅读 · 0 评论 -
CSP-S 训练 诚哥的逆袭6(后缀数组)
传送门 直接把所有串拼起来跑后缀数组即可。 代码: #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<cstdlib> #include<algorithm> #define ri register int using...原创 2019-08-01 21:47:59 · 325 阅读 · 0 评论
分享