[模板]后缀数组

这是lrj的后缀数组模板

int s[MAXN+10];//char
int sa[MAXN+10],t[MAXN+10],t2[MAXN+10],c[MAXN+10];
void build_sa(int m)
{
	int i,*x=t,*y=t2;
	for(i=0;i=0;i--) sa[--c[x[i]]]=i;
	
	for(int k=1;k<=n;k<<=1)
	{
		int p=0;
		for(i=n-k;i=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=n) break;
		m=p;
	}
}
int Rank[MAXN+10],h[MAXN+10];
void getheight()
{
	int i,k=0;
	for(i=0;i



后缀数组的LCP

int LOG(int x)
{
	int res=0;
	while(x)
	{
		x>>=1;
		res++;
	}
	return res-1;
}
int sparse_table[MAXN+10][MAXLOG];
void pre()
{
	int i,j;
	for(i=0;i



你可能感兴趣的:(c++,后缀数组,模板)