主席樹 靜態 的輕鬆入門

2021-08-22 02:37:23 字數 1592 閱讀 4046

∑n

i=1∫

85∗∑

kj=0i2∑

i=1n

∫58∗

∑j=0ki2

emmm…最近入門了主席樹, 感覺其實不是很難, 主要理解了就很簡單了(畢竟**這麼短)

給出乙個數列,求區間 l ~ r 之間的第 k 大值
利用數列中 n 個資料建立 n 棵樹, 其中第 i 棵樹維護 1 ~ i 這個字首內的資料資訊

第 i 棵樹中的每個節點都有其所代表的區間範圍(和線段樹一樣), 但這些節點所代表的區間範圍指的是值域範圍,

即每個節點維護 1 ~ i 之間的全部節點中在此至於範圍內的數的個數

(出自主席樹詳解 )

下面是一棵空樹(在**實現中可以不建樹)

之前說的主席樹的概念中, 主席樹是要對每個節點 i 建立一棵維護字首資訊的樹.

但是對於每乙個字首數列都建一棵樹所要使用的節點是 n2

logn

n

2log⁡n

的. 所以… 真的如此樸素的建樹的話必然會爆記憶體.但是我們仔細想想之後可以發現:

第 i 棵樹 和 第 i-1 棵樹中許多節點都是資訊相同(即 在一棵樹中的位置相同且維護的數值相同)的相似節點, .

那麼我們可不可以考慮偷懶一點, 將上一棵樹的節點直接拿過來用呢?當然是可以的, 圖如下.

下面還有一張, 是沒有重複利用節點的…森林吧 (圖中相似節點編號相同).

將相同編號的節點合併之後是這樣的:

最後感謝 bzt 大佬的blog

同學們bye ( ^_^ )/~~

靜態主席樹

首先主席樹解決什麼樣的問題?最經典的問題就是 區間第k小問題 也就是指定乙個區間,要求求出這個區間中第k小的數字 在搞懂什麼是主席樹之前,我們要先對權值線段樹有一定的了解,下面我們就先說一下權值線段樹,然後詳細說一下主席樹以及主席樹程式的實現.權值線段樹 每個葉子節點的數值表示的是 陣列中含有這個數...

靜態主席樹

主席樹 對於序列的每乙個字首建一棵以序列裡的值為下標的線段樹 所以要先離散化 記錄該字首序列裡出現的值的次數 記離散後的標記為1 n 下面值直接用1 n代替 對於區間 x,y 的第k大的值,那麼從root x 1 root y 開始,t root y 1,mid root x 1 1,mid t表示...

主席樹 入門

思想類似字首和,訪問某狀態的線段樹可通過末減初狀態進行求解。hdu4417 第二道模板題 有很多細節需要注意。1.題目給定ai的高度可能為0,但通過離散化事實上不影響結論。2.給定的訪問區間 x,y 以及高度h也可能為零,因而x,y需對應 查詢依舊是root y root x 1 3.對於高度h,為...