平衡樹——(不旋轉的那種)——fhp heap——可持久化
阿新 • • 發佈:2020-11-14
一、什麼是fhp treap,有什麼用
treap,即tree+heap,而且這個tree是BST
簡單的講,treap是一棵樹,而它有以下幾個性質
1、樣子就是(或 幾乎是)一顆完全二叉樹
2、它的節點的值滿足BST——即: 左兒子 <= 根 <= 右兒子
3、它的節點序號滿足根堆,若令其滿足大根堆——即: 根節點序號 > 左兒子、右兒子 ——而這裡我們用一個隨機的fix陣列來維護(保證結構的隨機性)
--------->fhp treap
若是有旋treap,則我們通過旋轉樹的方式來保證樹的平衡,
而對於非旋treap,我們則通過 合併+拆分 來實現
---------------------------->可持久化
由於我們是合併+拆分,那麼整棵樹的大致結構就不會變,由此可以延伸出 持久化 的作用——要變的建立新節點,新增更改過後的節點並記錄,複製不變的節點——這樣,我們既有了新的一個版本,也保留了原來的版本,於是達到了持久化的目的
那麼來看一道題——
二、例題
#2782 可持久化序列【模板】
描述
您需要維護一個序列,其中需要提供以下操作:
插入一個數到序列的第 t 版本使其成為序列的第 k項,這個數為 x ;
刪除序列的第 t 版本的第 k 項;
查詢序列的第 t 版本的第 k 項。
第 0 個版本為空序列。修改操作不會影響被修改的版本,而總是產生一個新版本。
輸入
第一行有一個正整數 n 表示操作的數量。
接下來 n 行每行第一個正整數 opt 表示操作的型別,後面有 3 個整數 t,k,x 或 2 個整數 t,k 表示操作的引數。
輸出
對於每個查詢操作輸出一行一個數,表示查詢的結果。
樣例輸入 17 1 0 1 1 1 1 1 2 1 2 1 3 2 3 2 3 4 2 1 4 3 4 1 5 1 5 3 3 2 1 3 4 6 1 6 3 7 1 7 1 8 3 8 2 3 7 3 2 8 4 2 9 2 3 11 4 3 10 4 樣例輸出 1 2 3 1 6 4樣例