[提高+] 模板口胡

g1ove發表於2024-03-27

子序列自動機

這什麼玩意,這也是藍色?
這東西在上次 \(\text{abc346f}\) 出現了。

Sol 1

首先,貪心每次取最前的一定是最優的。
所以直接把這些數塞進 vector 裡二分下就行了。
好寫好想。
時間複雜度 \(O(n+\sum l\log n)\)

Sol 2

真正的子序列自動機!
其實就是定義 \(nxt_{i,c}\) 表示 \(i\) 後的第一個字元 \(c\)
那麼很簡單,每次繼承上一次,只更改一個數即可。
寫個主席樹就好了。
時間複雜度 \(O(n\log n+\sum l\log n)\)

Sol 3

離線做法。
每次貪心匹配,匹配到當前節點下一位,記錄每個子序列匹配位數。
時間複雜度 \(O(n+\sum l)\)

相關文章