[luogu] P3809 【模板】后缀排序 (SA)】的更多相关文章

板子,照着题解打的倍增版. #include <iostream> #include <cstdio> #include <cstring> using namespace std;const int N=1e6+7; char s[N];int n,m,x[N],y[N],bot[N],sa[N]; int main() { gets(s+1);n=strlen(s+1);m=122; for(int i=1;i<=n;i++) bot[x[i]=s[i]]++…
题目链接 //输出ht见UOJ.35 #include<cstdio> #include<cstring> #include<algorithm> const int N=1e6+5; int n,tm[N],t1[N],t2[N],SA[N],rk[N],ht[N]; //SA[i]=j:排名为i的后缀开头的下标为j //rk[i]=j:以下标i开头的后缀排名为j //ht[i]:排名为i的后缀与排名为i-1的后缀的LCP长度 char s[N]; void Get_…
题目链接 论找到一个好的教程的正确性.. 后缀数组 下标从1编号: //299ms 2560kb #include <cstdio> #include <cstring> #include <algorithm> const int N=1e5+5; int n,sa[N],rk[N],sa2[N],tm[N],ht[N]; char s[N]; void Get_SA() { int *x=rk,*y=sa2,m=200; for(int i=0; i<=m;…
P3809 [模板]后缀排序 题目链接:https://www.luogu.org/problemnew/show/P3809 题目背景 这是一道模板题. 题目描述 读入一个长度为 nn 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 11 到 nn. 输入输出格式 输入格式: 一行一个长度为 nn 的仅包含大小写英文字母或数字的字符串. 输出格式: 一行,共n个整数,表示答案. 输入输出样例 输入…
P3809 [模板]后缀排序 从这学的 后缀数组sa[i]就表示排名为i的后缀的起始位置 x[i]是第i个元素的第一关键字 y[i]表示第二关键字排名为i的数,在第一关键字中的位置 #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 1000005 #define rint register int int n,m,c[N],sa[N],x[N],y[N…
[洛谷P3809][模板]后缀排序 题目大意: 对于给定的长度为\(n(n\le10^6)\)的字符串求后缀数组\(sa[i]\). 思路: 倍增+快排构造后缀数组.代码参考<挑战程序设计竞赛>.时间复杂度\(\mathcal O(n\log^2n)\). 源代码: #include<cstdio> #include<cstring> #include<algorithm> const int N=1e6+1; char s[N]; int n,k,sa[N…
[模板]后缀排序 题目背景 这是一道模板题. 题目描述 读入一个长度为 \(n\) 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 \(1\) 到 \(n\) . 输入输出格式 输入格式: 一行一个长度为 \(n\) 的仅包含大小写英文字母或数字的字符串. 输出格式: 一行,共 \(n\) 个整数,表示答案. 输入输出样例 输入样例#1: 复制 ababa 输出样例#1: 复制 5 3 1 4 2…
题意 题目背景 这是一道模板题. 题目描述 读入一个长度为 $ n $ 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 $ 1 $ 到 $ n $. 输入输出格式 输入格式: 一行一个长度为 $ n $ 的仅包含大小写英文字母或数字的字符串. 输出格式: 一行,共n个整数,表示答案. 输入输出样例 输入样例#1: 复制 ababa 输出样例#1: 复制 5 3 1 4 2 说明 $n <= 10^6…
参考资料这次是真抄的: 1.后缀数组详解 2.后缀数组-学习笔记 3.后缀数组--处理字符串的有力工具 定义 \(SA\)排名为\(i\)的后缀的位置 \(rk\)位置为\(i\)的后缀的排名 \(tp\)第二关键字的排名为\(i\)的后缀的位置,还被用作\(rank\)的暂存 \(tax\)每个排名对应的后缀数量 后缀数组就是为了求出\(sa\)和\(rk\) 性质 \(rk[sa[i]]=i\) \(sa[rk[i]]=i\) $LCP(x,y) $:字符串x与字符串y的最长公共前缀,在这里…
参考资料:victorique的博客(有一点锅无伤大雅,记得看评论区),$wzz$ 课件(快去$ftp$%%%),$oi-wiki$以及某个人的帮助(万分感谢!) 首先还是要说一句:我不知道为什么我这么菜让我讲这么大神的知识点,我理解不深刻,你们可以随时$Ha(n)ck$然后我可能就fix不了了你知道吧 (好吧我大概又理解了因为数学是NC讲的数据结构是skyh讲的我能讲的可能也就是这种东西了) 希望还会的大神帮我解场...(某$bx$和某牛都$A$穿了) 顺便「无图预警」(懒得画又懒得粘) 当时…