접미사 배열DC3 (템 플 릿 대전)

3203 단어 ACM데이터 구조
/*
suffix  : i        
sa  :                SA ,      
rank  : rank[i]  suffix[i]       ,    
*/
#include "stdio.h"
#include "string.h"
#define maxn 20004
#define maxm 1000005

#define F(x) ((x)/3+((x)%3==1?0:tb))
#define G(x) ((x)=0;i--) b[--ws[wv[i]]]=a[i];
     return;
}
void dc3(int *r,int *sa,int n,int m)
{
     int i,j,*rn=r+n,*san=sa+n,ta=0,tb=(n+1)/3,tbc=0,p;
     r[n]=r[n+1]=0;
     for(i=0;ib) {t=a;a=b;b=t;}
    return(height[askRMQ(a+1,b)]);
}
/*
*/
char st[maxn];
int r[maxn*3],sa[maxn*3];
/*      
int main()
{
    int i,n,len,k,ans=0,w;
    scanf("%s",st);
    len=strlen(st);
    for(i=0;ians) ans=k*2,w=i-k;
      k=lcp(i,n-i-1);
      if(k*2-1>ans) ans=k*2-1,w=i-k+1;
    }
    st[w+ans]=0;
    printf("%s
",st+w); return 0; }*/ /* int main() { int i,j,n,ans=0; scanf("%s",st); j=strlen(st); st[j]=1; scanf("%s",st+j+1); n=strlen(st); for(i=0;ians) if((jsa[i]) || (j>sa[i-1] && jmax) max=sa[i]; if(max-min>k) return(1); } } return(0); } int main() { int i,j=0,k,n; int min,mid,max; scanf("%d",&n); while(n!=0) { n--; for(i=0;i=4) printf("%d
",max+1); else printf("0
"); scanf("%d",&n); } return 0; } */ /* k n , k int check(int n,int k,int mid) { int i,s=1; for(i=1;i<=n;i++) if(height[i]>=mid) { s++; if(s>=k) return(1); } else s=1; return(0); } int main() { int i,k,n; int min,mid,max; scanf("%d %d",&n,&k); for(i=0;i0) { scanf("%s",st); n=strlen(st); for(i=0;i=a[c]) { ss-=(long long)(a[c-1]-a[c])*b[c-1]; a[c-1]=a[c]; b[c-1]+=b[c]; c--; } } printf("%I64d
",ans); scanf("%d",&k); } return 0; } */

좋은 웹페이지 즐겨찾기