{"id":240,"date":"2010-05-06T16:46:00","date_gmt":"2010-05-06T08:46:00","guid":{"rendered":"http:\/\/localhost\/?p=240"},"modified":"2010-05-06T16:46:00","modified_gmt":"2010-05-06T08:46:00","slug":"suffix_array","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=240","title":{"rendered":"Suffix Array&#8230;"},"content":{"rendered":"<p> \u597d\u4e0d\u5bb9\u6613\u5199\u4e86\u4e2aSA\u7684\u4ee3\u7801\uff0c\u4ee5\u524d\u5199\u8fc7\u4f46\u662f\u5fd8\u6389\u4e86\u56e7\u3002\u3002\u3002<br \/>Code\uff1a<br \/>#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;iostream&gt;#define rep(i,n) for(int i=0;i&lt;n;i++)using namespace std;const int maxn=10000+10;char C[maxn];int n,sa[maxn],ta[maxn],tb[maxn],m,tv[maxn];void sort(int*x,int*y,int m){    static int w[maxn];    rep(i,m)w[i]=0;rep(i,n)w[x[y[i]]]++;    rep(i,m)if(i)w[i]+=w[i-1];    for(int i=n-1;i&gt;=0;i&#8211;)sa[&#8211;w[x[y[i]]]]=y[i];}inline bool cmp(int*r,int i,int j,int l){    return r[i]==r[j]&amp;&amp;r[i+l]==r[j+l];}void Da(){    int*x=ta,*y=tb,i,j,p;    rep(i,n)x[i]=C[i],tv[i]=i;sort(x,tv,m);    for(j=1,p=1;p&lt;n;j*=2,m=p)    {        for(p=0,i=n-j;i&lt;n;i++)y[p++]=i;        rep(i,n)if(sa[i]&gt;=j)y[p++]=sa[i]-j;sort(x,y,m);        for(swap(x,y),p=1,x[sa[0]]=0,i=1;i&lt;n;i++)            x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;    }}int main(){    scanf(&quot;%s&quot;,C);n=strlen(C);C[n++]=0;m=&#8217;Z&#8217;+1;    Da();    rep(i,n)printf(&quot;%dn&quot;,sa[i]);} <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u597d\u4e0d\u5bb9\u6613\u5199\u4e86\u4e2aSA\u7684\u4ee3\u7801\uff0c\u4ee5\u524d\u5199\u8fc7\u4f46\u662f\u5fd8\u6389\u4e86\u56e7\u3002\u3002\u3002Code\uff1a#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;iostream&gt;#define rep(i,n) for(int i=0;i&lt;n;i++)using namespace std;const int maxn=10000+10;char C[maxn];int n,sa[maxn],ta[maxn],tb[maxn],m,tv[maxn];void sort(int*x,int*y,int m){ static int w[maxn]; rep(i,m)w[i]=0;rep(i,n)w[x[y[i]]]++; rep(i,m)if(i)w[i]+=w[i-1]; for(int i=n-1;i&gt;=0;i&#8211;)sa[&#8211;w[x[y[i]]]]=y[i];}inline bool cmp(int*r,int i,int j,int l){ return r[i]==r[j]&amp;&amp;r[i+l]==r[j+l];}void Da(){ int*x=ta,*y=tb,i,j,p; rep(i,n)x[i]=C[i],tv[i]=i;sort(x,tv,m); for(j=1,p=1;p&lt;n;j*=2,m=p) { for(p=0,i=n-j;i&lt;n;i++)y[p++]=i; rep(i,n)if(sa[i]&gt;=j)y[p++]=sa[i]-j;sort(x,y,m); for(swap(x,y),p=1,x[sa[0]]=0,i=1;i&lt;n;i++) x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++; }}int main(){ scanf(&quot;%s&quot;,C);n=strlen(C);C[n++]=0;m=&#8217;Z&#8217;+1; Da(); rep(i,n)printf(&quot;%dn&quot;,sa[i]);}<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/240"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=240"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/240\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}