poj 3581 Sequence(二)

2014-11-24 11:02:52 · 作者: · 浏览: 1
]=p++;
}
m=p;
for(j=1,p=1;p {
p=0;
for(i=n-j;i for(i=0;i=j) y[p++]=sa[i]-j;
for(i=0;i for(i=0;i for(i=0;i for(i=1;i for(i=n-1;i>=0;i--) sa[--ts[tv[i]]]=y[i];
swap(x,y);
p=1;
x[sa[0]]=0;
for(i=1;i {
if(cmp(y,sa[i-1],sa[i],j)) x[sa[i]]=p-1;
else x[sa[i]]=p++;
}
}
}
void calh(int n)
{
int i,k;
for(i=1;i<=n;i++) rank[sa[i]]=i;
k=0;
for(i=0;i {
int tmp=sa[rank[i]-1];
for(;r[i+k]==r[tmp+k];k++)
;
height[rank[i]]=k;
k --k:0;
}
}
int main()
{
int i,n,st1;
scanf("%d",&n);
for(i=n-1;i>=0;i--)
{
scanf("%d",&r[i]);
}
r[n]=-inf;
da(n+1);
calh(n);
int mi=inf;
for(i=2;i {
if(rank[i] {
mi=rank[i];
st1=i;
}
}
for(i=st1;i printf("%d\n",r[i]);
int rec=1;
for(i=0;i {
r[i+st1]=r[i];
}
r[2*st1]=-inf;
da(st1*2+1);
calh(2*st1);
mi=inf;
for(i=1;i {
if(rank[i] {
mi=rank[i];
rec=i;
}
}
for(i=rec;i {
printf("%d\n",r[i%st1]);
}
}


作者:Wings_of_Liberty