Two strings的另一種解法

論文中的解法是離線插入 \(O(\log n)\) 詢問 \(O(\log n)\) 的,不過我發現有一種離線插入 \(O(1)\) 詢問 \(O(\log n)\) 的方法。

首先我們離線處理,將兩個串連在一起。我們以 \(ababa\)\(aba\) 爲例:

比如現在我們要詢問 \(A\)\([1,4]\)\(B\)\([1,2]\)

我們先在 \(rnk[7]\) 開始倍增,使得 \([l,r]\)\(height>=2\)

然後我們在這個區間中找多少 \(1\leq sa[i]\leq 3\)。爲什麼是 \(3\) 呢?因爲 \(3-4-len_b+1\)。顯然答案爲 \(2\)

詢問就是主席樹上區間加,詢問是 \(O(\log n)\) 的,插入是 \(O(1)\) 的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章