sa[i] = j
: 代表第i
名的字尾是[j,n]
。
rank[i] = j
: 代表字尾[i,n]
是第j
名。
height[i] = j:
第i
名與第i-1
名的lcp是j
。
詢問長度大於k的不同子串個數。
每個子串都是乙個字尾的字首,所以乙個字尾加入會貢獻出n-sa[i]+1
個子串。
例如字尾aaabbc
,貢獻的子串有aaabbc
,aaabb
,aaab
,aaa
,aa
,a
。扣除掉與前面重複出現的子串就是新貢獻的子串個數:n-sa[i]+1-height[i]
。假設height[i]=1
,k=3
,height
淘汰了a
,但是aa
也是不滿足的,所以對於長度大於k
的,只需n-sa[i]+1-max(height[i],k-1)
即可。
sa[i]下標從0開始
#include
#include
using
namespace std;
const
int n=
1e5+
100;
const
int m=
1e5+
100;
int wa[n]
,wb[n]
,wv[n]
,wss[m]
;string tr;
int r[n]
,sa[n]
;int
cmp(
int*r,
int a,
int b,
int l)
voidda(
int*r,
int*sa,
int n,
int m)
return;}
int rankk[n]
,height[n]
;void
calheight
(int
*r,int
*sa,
int n)
intmain()
Nginx的各個變數的含義
ngx http core module模組支援內建變數,他們的名字和apache的內建變數是一致的。首先是說明客戶請求title中的行,例如htt t,http cookie等等。此外還有其它的一些變數 args此變數與請求行中的引數相等 content length等於請求行的 content ...
lib字尾 a字尾的含義
當我們寫好乙個程式的時候,是以.c的字尾形式存在的,這個時候需要對.c進行編譯,轉成二進位制檔案,也就是生成在windows以.obj形式存在的,在linux下以.o形式存在的檔案,之後就需要進行鏈結,鏈結主要是鏈結函式和全域性變數,所以我們需要使用這些中間檔案,當你原始檔過多時,產生的中間檔案也是...
explain各個屬性含義
查詢的序列號 查詢的型別,主要是區別普通查詢和聯合查詢 子查詢之類的複雜查詢 輸出的行所引用的表 訪問型別 從左至右,效能由差到好 表示查詢時可能使用的索引。如果是空的,沒有相關的索引。這時要提高效能,可通過檢驗where子句,看是否引用某些字段,或者檢查字段不是適合索引 顯示mysql實際決定使用...