后缀数组的DC3模版【后缀数组】

/*
    之前一直用倍增法,发现有些题目卡倍增法,而DC3却能AC,所以顺便弄了
    DC3的模版,看以后会不会用到,嗯,就是酱紫
    提一些注意点:1.MAXN开n的十倍大小;
                  2.dc3(r,sa,n+1,Max+1);r为待后缀处理的数组,sa为存储排名位置的数组,n+1和Max+1 都和倍增一样
                  3.calheight(r,sa,n);和倍增一样
    模版测试题目是 SPOJ 694 / SPOJ DISUBSTR Distinct Substrings【后缀数组】不相同的子串的个数
    做法和我之前写的那篇题解一样,大概就这些..
*/
#include
#include
#include
#include
#include
#include
using namespace std;
#define F(x) ((x)/3+((x)%3==1?0:tb))
#define G(x) ((x)=0;i--) b[--wws[wv[i]]]=a[i];
     return;
}
int c0(int *r,int a,int b)
{return r[a]==r[b]&&r[a+1]==r[b+1]&&r[a+2]==r[b+2];}
int c12(int k,int *r,int a,int b)
{if(k==2) return r[a]Max)Max=r[i];
        }
        r[n]=0;
        dc3(r,sa,n+1,Max+1);
        calheight(r,sa,n);
        int sum=0;
        for(int i=2;i<=n;i++)sum+=height[i];
        printf("%d\n",(1+n)*n/2-sum);
    }
    return 0;
}


你可能感兴趣的:(->,字符串,<-,后缀数组,SPOJ)