
后缀数组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 · 690 阅读 · 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 · 261 阅读 · 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 · 246 阅读 · 0 评论 -
【BZOJ4199】【NOI2015】—品酒大会(后缀数组)
传送门很显然kkk相似就是所有k≤lcpk \le lcpk≤lcp的后缀排序后不断加入,用个并查集维护一下合并两段的信息,大小,最大值,最小值就可以了据说某些题解过不了样例?#include<bits/stdc++.h>using namespace std;#define ll long long#define re registerinline int read(...原创 2019-03-25 19:00:52 · 138 阅读 · 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 · 253 阅读 · 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 · 163 阅读 · 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 · 224 阅读 · 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 · 216 阅读 · 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 · 202 阅读 · 0 评论