| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
你拿去自己拍一下吧In Reply To:用后缀数组做的(自己弄了很多测试数数据都没有问题),wa了无数次,哪位牛人帮我看看啊(内有代码),给点测试数据也可以啊!!!! Posted by:qjh817937 at 2008-03-19 10:33:23 #include<cstdio>
typedef int arr[20010];
int n,m,k,i,j,tail,head,ans=0;
arr a,sa,rank,x[2],ssa,st,height;
int q[20010][2];
int fmin(int a,int b){
if (a<b)return a;return b;
}
int fmax(int a,int b){
if (a>b)return a;return b;
}
void qsort(int l,int r){
int i=l,j=r,m=a[sa[(l+r)>>1]];
while (i<j){
while (a[sa[i]]<m)i++;
while (a[sa[j]]>m)j--;
if (i<=j){
int x=sa[i];sa[i]=sa[j];sa[j]=x;
i++;j--;
}
}
if (i<r)qsort(i,r);
if (l<j)qsort(l,j);
}
void sort(int d,int m){
int i;
for (i=0;i<=m;i++)st[i]=0;
for (i=1;i<=n;i++)ssa[i]=sa[i];
for (i=1;i<=n;i++)st[x[d][sa[i]]]++;
for (i=1;i<=m;i++)st[i]+=st[i-1];
for (i=n;i>=1;i--)sa[st[x[d][ssa[i]]]--]=ssa[i];
}
void calcheight(){
int i,k=0;
for (i=1;i<=n;i++){
if (k>0)k--;
for (;a[i+k]==a[sa[rank[i]-1]+k];k++);
height[rank[i]]=k;
}
}
int main(){
scanf("%d%d",&n,&k);
for (i=1;i<=n;i++)scanf("%d",&a[i]);
a[n+1]=-1;
for (i=1;i<=n;i++)sa[i]=i;
sa[0]=n+1;
qsort(1,n);
for (i=1;i<=n;i++)rank[sa[i]]=rank[sa[i-1]]+(a[sa[i]]!=a[sa[i-1]]);
for (i=1;1<<i<=n<<1;i++){
for (j=1;j<=n;j++) x[0][j]=rank[j];
for (j=1;j<=n;j++) x[1][j]=rank[fmin(j+(1<<i>>1),n+1)];
if (rank[sa[n]]>m)m=rank[sa[n]];
sort(1,m);
sort(0,m);
for (j=1;j<=n;j++) rank[sa[j]]=rank[sa[j-1]]+(x[0][sa[j]]!=x[0][sa[j-1]]||x[1][sa[j]]!=x[1][sa[j-1]]);
}
calcheight();
k--;
head=1;tail=0;
for (i=1;i<k;i++){
while (head<=tail&&q[tail][0]>=height[i])tail--;
q[++tail][0]=height[i];
q[tail][1]=i;
}
for (i=k;i<=n;i++){
if (head<=tail&&i-q[head][1]>=k)head++;
while (head<=tail&&q[tail][0]>=height[i])tail--;
q[++tail][0]=height[i];
q[tail][1]=i;
if (q[head][0]>ans){
ans=q[head][0];
}
}
printf("%d\n",ans);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator