![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀数组sa
stargazer.
夜を穿つの
展开
-
【Codeforces 917 E】Upside Down(Ac自动机 / 后缀数组 / 哈希 / border相关 / Kmp / Exgcd)
传送门 至今写过最长的字符串题 看起来和回忆树差不多 但不能直接kmpkmpkmp了 分成u→lca,lca→vu\rightarrow lca,lca\rightarrow vu→lca,lca→v和穿过lcalcalca分别考虑 前面直接照搬回忆树的做法 考虑穿过lcalcalca的 求出u→lcau\rightarrow lcau→lca中最长的后缀满足是SSS的前缀的长度 以及lca→vlca\rightarrow vlca→v最长前缀满足为SSS后缀的长度 得到了可以直接利用borderborde原创 2020-05-20 20:18:20 · 616 阅读 · 0 评论 -
【LOJ#6198】—谢特(后缀数组+01Trie)
传送门 建出后缀数组按照heightheightheight合并连通块 维护01Trie01Trie01Trie合并,启发式询问即可 #include<bits/stdc++.h> using namespace std; const int RLEN=(1<<20)|5; inline char gc(){ static char ibuf[RLEN],*ib,*ob;...原创 2019-10-19 00:01:01 · 198 阅读 · 0 评论 -
【BZOJ4556】【TJOI2016&HeOI2016】—字符串(后缀数组+主席树+ST表)
传送门 先建出SaSaSa,考虑二分串的长度,判断可行 显然和CCC这个串的lcp&gt;=midlcp&gt;=midlcp>=mid的那些rankrankrank相连的一块都是满足的 那我们就只需要查询是否有串在aaa~bbb的子串内 对rkrkrk建一颗主席树,区间查询就可以了 #include<bits/stdc++.h> using namespace ...原创 2019-02-28 18:54:58 · 212 阅读 · 0 评论 -
【BZOJ4199】【NOI2015】—品酒大会(后缀数组)
传送门 很显然kkk相似就是所有k≤lcpk \le lcpk≤lcp的后缀 排序后不断加入,用个并查集维护一下合并两段的信息,大小,最大值,最小值就可以了 据说某些题解过不了样例? #include<bits/stdc++.h> using namespace std; #define ll long long #define re register inline int read(...原创 2019-03-25 19:00:52 · 118 阅读 · 0 评论 -
【BZOJ4892】【TJOI2017】—DNA(后缀数组+ST表)
传送门 考虑3个不同的位置 就是枚举AAA的一个子串,看和BBB是否有超过3个位置不匹配 可以建立后缀数组之后跳lcplcplcp,如果有333个位置以上不匹配就不行 似乎直接哈希二分就完了啊 写个p的后缀数组 #include<bits/stdc++.h> using namespace std; inline int read(){ char ch=getchar(); int...原创 2019-04-04 12:01:31 · 195 阅读 · 1 评论 -
【BZOJ4650】【UOJ219】【NOI2016】—优秀的拆分(后缀数组+ST表+差分)
BZOJ传送门 UOJ传送门 L[i]L[i]L[i]表示iii开始连续的BBBBBB的个数 R[i]R[i]R[i]表示iii结尾连续的AAAAAA的个数 ans=L[i]∗R[i−1]ans=L[i]*R[i-1]ans=L[i]∗R[i−1] 直接哈希暴力枚举O(n2)O(n^2)O(n2) 95pts走人 正解可以看这个大佬的 写的很详细 不想写了 结果O(nlogn)O(nlogn)O...原创 2019-07-14 22:16:46 · 120 阅读 · 0 评论 -
【BZOJ4453】—cys就是要拿英魂(后缀数组+ST表+单调栈)
传送门 题意:多次询问一个串的一段区间内的字典序最大的子串的位置 直接贪心是错的 比如BAABBBAABBBAABB 询问[1,4][1,4][1,4]的时候,最大的是444,但实际应该是111 考虑对于222个位置i,ji,ji,j哪个更大 rk[i]>rk[j]rk[i]>rk[j]rk[i]>rk[j]时iii更大 rk[i]<rk[j]&a...原创 2019-07-15 17:39:28 · 169 阅读 · 0 评论 -
【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
传送门 后缀数组终于跑过了SamSamSam了 后缀自动机上虚树是显然的 后缀数组就按rkrkrk排序后考虑每个位置的贡献,显然就是左右都比他大的时候 单调栈维护一下就是了 后缀数组+单调栈 #include<bits/stdc++.h> using namespace std; const int RLEN=1<<20|1; inline char gc(){ ...原创 2019-07-18 15:44:15 · 165 阅读 · 0 评论 -
【BZOJ4310】—跳蚤(后缀数组+二分答案)
传送门 darkbzojdarkbzojdarkbzoj上题面有误,应该是最大的最小 考虑二分这个最小的串xxx的排名kkk 那么也就是说所有排名比这个大的一定要被切开 考虑一个后缀S[p,n]S[p,n]S[p,n] 如果lcp(S[p,n],x)=0lcp(S[p,n],x)=0lcp(S[p,n],x)=0那么显然不合法 否则考虑在lcplcplcp前切开 考虑从后往前考虑每个后缀 那么显然...原创 2019-09-26 22:04:10 · 140 阅读 · 0 评论