sa[i],表示在所有字尾中,排在第i位的字尾是哪個字尾。
rank[i],表示以第i個字母為結尾的字尾在所有字尾中排第rank[i]個。
height 陣列,表示height[i]=(suffix(sa[i-1])和suffix(sa[i])的最長公共字首),也就是排名相鄰的兩個字尾的最長公共字首的長度 。
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=200010;
int wa[maxn],wb[maxn],wsf[maxn],wv[maxn];
int rank[maxn],height[maxn],s[maxn],sa[maxn];
void make_sa(int n,int m)
for(i=0;ifor(i=0;i0;
for(i=0;ifor(i=1;i1];
for(i=n-1;i>=0;i--) sa[--wsf[wv[i]]]=y[i];
swap (x,y);
x[sa[0]]=0;
for(p=1,i=1;i1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j]) ? p-1 : p++;}}
}void make_height(int n)
}int main ()
字尾樹 字尾陣列
在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...
字尾樹 字尾陣列
我們考慮將乙個串的所有字尾插入乙個trie中,得到的trie就是字尾trie。我們可以發現,樹上有分叉或者是字尾節點的點的個數是o l en o len o len 個,這個後面解釋,於是把沒有分支並且不是字尾節點的點壓縮到一起,就變成了字尾樹。不難發現,字尾樹可以表示該字串的所有子串。下面分析一下...
字尾陣列入門,字尾陣列模板整理
我自己懶得寫,就是想寫個部落格儲存下大佬的部落格位址 點這模板題 大佬的模板 include include include include include include include include include include include define inf 0x3f3f3f3f d...