這提供乙個sa+主席樹的做法,這個用做法就你順勢可以在敲掉基本一樣的洛谷p4084
題意詢問的是k串在[l,r]的串裡面出現了多少次,不同位置算多次。
對於乙個串在sa裡的位置以及和他最像的位置必然是連續的(字典序的原因),然後對於每乙個串就都可以二分出乙個區間,這個區間內的串都有和當前串相同的字首。
那麼我們知道這個區間後,怎麼知道詢問要求的區間有多少個是落在能夠使用的區間呢?
這就是可以利用主席樹。我們讓rk為權值去建立主席樹,然後按字串長度的順序去插入,然後詢問的時候我們就可以直接詢問主席樹上某個區間裡面出現了多少個rk在二分出來的區間的數量,(二分出來的區間也就是乙個rk的區間範圍)
re警告之一:由於字串可以有很多個,如果每一組都是用新的字元去連線的話,字元會不夠用,這就會re,我們需要用int去儲存字串,這樣就不會有re的問題了。
re警告之二:二分的時候要注意有沒有寫錯,如果你懶得在敲一次想cv你之前寫過的**,不要cvp2336 那道題的二分你寫錯了也能a,你debug可能要好久。
re警告之三:主席樹空間要開足,我一開始主席樹開小了出re但是沒紅感嘆號提醒又debug好久
**
hdu 6621 主席樹 二分
題意 給乙個陣列a,每次詢問,給定l,r,p,k,求 l r 中的數與p做差的絕對值的第k小。思路 對陣列a建立主席樹 不用離散化 對於每次詢問,二分答案,如果 l r 區間中的 p mid p mid 範圍內的數大於k,則說明二分的答案偏大,需要縮小區間 如果等於k,也需要縮小,因為要找到精確的值...
bzoj2653 二分 主席樹
對於每乙個詢問二分答案。設當前答案為x,將 x的數的權值設為1,當 b 1,c 1 的權值和 a,b 權值和最大的字尾 c,d 權值和最大的字首 0時x可行。先對每個數離散,然後以每個值建立主席樹記錄區間和 最大字首 最大字尾就可以了。時間複雜度 o n log3n 1 include2 inclu...
cf 474E 線段樹 dp 離散化後二分查詢
題意 給你n個柱子,每個柱子都有乙個高度,你從第乙個柱子開始跳往後跳,後面的柱子要滿足 hi hj d才可以跳上去,問最多跳多少步,並且輸出一種跳法,從小到大輸出柱子號。思路 真肯定是個dp,而且思路很簡單 轉移方程 dp i max dp j 1,hi hj d 但是n的範圍是10 5,那麼你每次...