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...