主席樹 學習整理

2021-07-28 20:40:15 字數 486 閱讀 4139

題意:給出1e5個數,向你提5000問,l到r間的第k個數是多少?

主席樹,又叫可持久化線段樹或者函式式線段樹。我只知道這些了,據說是一位大神沒學會劃分樹就自己搞了這麼個替代品,結果,比原來的還要強。

說一下思路:

因為是求第k大的數,所以線段樹是不行的,因為數是排好序的,所以伸展樹好像也不好解決。

所以主席樹用到了字首和的思想,如果知道每個數在l前出現了幾次,r前出現了幾次,做差就可以在l~r間出現了幾次,自然也就知道k大了!

所以,第一步把所有的數排序、去重。

數列:2 4 6 8 8 6 4 2

hash:2 4 6 8

數列變為:1 2 3 4 4 3 2 1(就是各個數在hash中的排序)

第二部建n+1個線段樹,就是按照數列的順序每讀入乙個數就建乙個線段樹,把新樹在上一顆樹的基礎上把這個數字按照去重後的排序加入當前線段樹。

這樣求l~r的k值就用線段樹r減去線段樹l-1,在差中找k大值就可以了。

主席樹整理

主席樹是一種奇怪的資料結構,好像又叫函式式線段樹。主席樹是一種可持久化資料結構,即它可以支援查詢 歷史記錄 比如區間第k大等等。現在先說靜態的主席樹 大致思路是 先將n元素的值離散為 0,sz 1 這棵樹的每個節點記錄的是在當前字首 1.i 中,離散值處在 l,r 區間內的值的個數。由線段樹的單點更...

主席樹學習記錄

搞了一段時間網路流後,最後還是回到了資料結構。主席樹,引fotile主席的一段話 這個東西是當初我弱不會劃分樹的時候寫出來替代的乙個玩意.被 有用心的人取了很奇怪的名字 想法是對原序列的每乙個字首 1.i 建立出一顆線段樹維護值域上每個數的出現次數,然後發現這樣的樹是可以減的,然後就沒有然後了 其實...

主席樹學習筆記

問題 給定乙個n個數的序列,q次詢問第x個數到第y個數中的第k最值。我們假定是第k小。為了使討論更加簡便,我們假定序列的每個數都是不大於n的正整數。當然一般題目中元素範圍很大,但是可以用離散化預處理來做到這一點。考慮乙個比較高階的做法 令g i j 為前i個數中,值為j的數的個數。很容易用o n 2...