UOJ #35. 后缀排序(后缀数组模板题)

测试一下模板

#include
#include
using namespace std;
const int  maxn =2e5+10;
struct Suffix
{
    int r[maxn];
    int sa[maxn],rank[maxn],height[maxn];
    int t[maxn],t2[maxn],c[maxn],n,m;
    void init(string s)
    {
        n=s.size();
        for(int i=0;i=0; i--) sa[--c[x[i]]]=i;
        for (k=1,p=1; k=k) y[p++]=sa[i]-k;
            for (i=0; i=0; i--) sa[--c[x[y[i]]]]=y[i];
            swap(x,y);
            p=1;
            x[sa[0]]=0;
            for (i=1; i>str;
    int len=str.size();
    
    SA.init(str);
    SA.build();
    for(int i=1;i<=len;i++)
        cout<< SA.sa[i]+1<<(i==len?'\n':' ');
    SA.LCP();
    for(int i=1;i


你可能感兴趣的:(后缀数组)