后缀数组模板
来源:互联网 发布:创维云电视软件下载 编辑:程序博客网 时间:2024/04/28 12:58
http://caiminjian.diandian.com/post/2012-08-27/40038043416 算法解释
N为一倍即可,m至少比最大值大1
int s[N],wa[N],wc[N],wv[N],sa[N],wb[N],height[N],rank[N];inline bool cmp(int *r,int a,int b,int l){ return r[a]==r[b]&&r[a+l]==r[b+l];}void da(int *r,int *sa,int n,int m){ int i,j,p,*x=wa,*y=wb,*t; for(i=0;i<m;i++) wc[i]=0; for(i=0;i<n;i++) wc[x[i]=r[i]]++; for(i=1;i<m;i++) wc[i]+=wc[i-1]; for(i=n-1;i>=0;i--) sa[--wc[x[i]]]=i; for(j=1,p=1;p<n;j<<=1,m=p) { for(i=n-j,p=0;i<n;i++) y[p++]=i; for(i=0;i<n;i++) if(sa[i]>=j) y[p++]=sa[i]-j; for(i=0;i<n;i++) wv[i]=x[y[i]]; for(i=0;i<m;i++) wc[i]=0; for(i=0;i<n;i++) wc[wv[i]]++; for(i=1;i<m;i++) wc[i]+=wc[i-1]; for(i=n-1;i>=0;i--) sa[--wc[wv[i]]]=y[i]; for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1;i<n;i++) x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++; }}void getheight(int *r,int *sa,int n){ int i,j,k=0; for(i=1;i<=n;i++) rank[sa[i]]=i; for(i=0;i<n;height[rank[i++]]=k) for(k?k--:0,j=sa[rank[i]-1];r[i+k]==r[j+k];k++);}
0 0
- 【后缀数组】后缀数组模板
- 后缀数组【模板】
- 【后缀数组模板】
- 后缀数组模板
- 后缀数组模板
- 【模板】后缀数组
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 【省选】【后缀数组】模板
- 后缀数组 模板
- 后缀数组 模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 模板-后缀数组
- fckeditor编辑器的使用
- 程序员必看的那些电影
- MySQL Vs PostgreSQL 2
- Python系列视频教程: Django【13讲】第五讲 URL配置
- POJ 2486 经典树形dp
- 后缀数组模板
- 正式在CSDN开博
- 励志---决定你一生成就的21个信念及要点
- 链表剖析之单链表剖析(二)
- SVN配置使用BeyoundCompare作为比较合并工具
- 蓝桥杯在线测试的题解
- hdu 4588 Count The Carries
- fff
- myeclipse设置代码提示