CF547E 二分+sa+主席樹

這提供一個sa+主席樹的做法,這個用做法就你順勢可以在敲掉基本一樣的洛谷P4084
題意詢問的是k串在[L,R]的串裏面出現了多少次,不同位置算多次。
對於一個串在SA裏的位置以及和他最像的位置必然是連續的(字典序的原因),然後對於每一個串就都可以二分出一個區間,這個區間內的串都有和當前串相同的前綴。
那麼我們知道這個區間後,怎麼知道詢問要求的區間有多少個是落在能夠使用的區間呢?
這就是可以利用主席樹。我們讓rk爲權值去建立主席樹,然後按字符串長度的順序去插入,然後詢問的時候我們就可以直接詢問主席樹上某個區間裏面出現了多少個rk在二分出來的區間的數量,(二分出來的區間也就是一個rk的區間範圍)
RE警告之一:由於字符串可以有很多個,如果每一組都是用新的字符去連接的話,字符會不夠用,這就會RE,我們需要用int去存儲字符串,這樣就不會有RE的問題了。
RE警告之二:二分的時候要注意有沒有寫錯,如果你懶得在敲一次想cv你之前寫過的代碼,不要cvP2336 那道題的二分你寫錯了也能A,你debug可能要好久。
RE警告之三:主席樹空間要開足,我一開始主席樹開小了出RE但是沒紅感嘆號提醒又debug好久
代碼

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