字尾陣列 dc3 模板

2021-07-23 14:27:40 字數 619 閱讀 1802

sa 按順序排列。

ranks指出了每乙個位置的排名。

//maxn 表示字尾的個數

#define maxn 200010

#define f(x) ((x)/3+((x)%3==1?0:tb))

#define g(x) ((x)int ra[maxn], rb[maxn], rv[maxn], rs[maxn];

int c0(int r, int a, int b)

int c12(int k, int r, int a, int b)

//r儲存資料,a儲存待排序字元下標,b儲存3長度字串的首字元下標,m表示基數的容量

void rsort(int r, int a, int b, int n, int m)

void dc3(int r, int sa, int n, int m)

int ranks[maxn], height[maxn];//height表示與之前乙個的最長公共字首

void calheight(int r, int sa, int n)

}char st[maxn];

int source[maxn*3], sa[maxn*3];

DC3演算法模板學習筆記

對第二關鍵字桶排序,保持相對順序不變,則個位數字有序,對第一關鍵字桶排序,由於第一關鍵字相同情況下個位總是遞增或持平,所以保持有序。高階資料結構 include includeusing namespace std 獲取字尾陣列中對應字尾的原本位置 define getrealpos 二元組的排序比...

字尾陣列 模板

char s n 陣列的長度要為兩倍的 int n n全域性變數為字元陣列的長度的 int sa n 2 high n 2 rank n 2 tmp n 2 top n 2 void makesa void lcp int main gets s int len strlen s s len get...

字尾陣列模板

過了期末了,繼續寫acm題 自己寫的字尾陣列模板。k,len,rank,sa,tmp,都要寫在外面,這樣就不用來回折騰了。也是使用倍增法來做的,得到乙個sa,儲存了字尾排在第i位的字尾的起始位置。因為空也算乙個字尾,所以函式中都是 len include include include includ...