給定乙個空串s
操作1 代表在
s前加入乙個字母使之成為新s
操作2 代表在詢問在當前
s中有多少連續子串等於給定串t
假設我們已經有了串
s的字尾平衡樹
插入乙個字母c
我們用s
i代表原串
s 從第
i個字元開始的字尾
則字尾 cs
與 任意乙個字尾 si
的大小關係可以用 c與s
i 的第乙個字母的大小關係
以及 字尾s1
與字尾si
+1的大小關係來表示
前面是兩個字元的比較 o(
1)後面兩個原串字尾的大小關係由字尾平衡樹所代表其的節點標號快速得出兩個字尾大小 o(
1)
在詢問串後加上−i
nf與inf
詢問當前ra
nk可以延伸與當前節點代表字尾的lc
p 的長度
然後利用hash判斷是否與當前節點的lc
p 是否大於等於當前延伸長度
字尾出現次數 ra
nksi
nf−r
anks
−inf
我居然貼了乙個錯的**。。
總結 字尾平衡樹學習筆記
字尾平衡樹,就是動態的維護字尾陣列,可以 o log n 在末尾插入字元,o log n 查詢 rank,sa 但是由於是維護的字尾資訊,所以插入只能在末尾插入字元 然後轉化成在開頭加乙個字元 相當於新增乙個字尾。方法一 我們需要一種能比較兩個字尾大小的方法,最簡單就是二分 hash,o log n...
字尾平衡樹
如果需要動態維護字尾陣列,支援在字串前端插入乙個字元,詢問字尾的大小關係,如何做呢?這是乙個不斷插入的問題,可以從增量的角度考慮。我們在前端插入乙個字元,其實就是插入了乙個新的字尾。我們的問題其實就是這個字尾排名多少。我們可以用平衡樹維護一下字尾陣列,從根節點開始二分比較這個字尾的大小,看看它應該被...
平衡樹 treap學習筆記(3)
在 2 中我們寫了無旋treap。然後我就找到了那道題qaq。文藝平衡樹 題目描述 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 輸入輸出格式 輸入格式 第一行為n...