可持久化左偏樹

2021-09-27 08:16:23 字數 590 閱讀 8188

閒來無事想學k短路,但看著很難打(

順手學的可持久化左偏樹倒是容易,來寫一發

基本思路就是每次merge的時候將普通左偏樹里準備作為新的根的結點copy乙個,對新結點搞事

然後所有操作基於merge

然後就沒了(

最近比較懶不想寫泛型和oop,oier碼風將就一下(

什麼時候寫好了泛型單獨放**

struct node};

node *root[

1<<10]

;int vertot;

node *

merge

(node *l,node *r)

ptr-

>npl=ptr-

>rc!=

null

?ptr-

>rc-

>npl+1:

1;return ptr;

}node *

push

(int val,node *rt)

inttop

(node *rt)

node *

pop(node *rt)

可持久化陣列(可持久化線段樹 平衡樹)

update 最後乙個點時間空間已經放大 標題即題意 有了可持久化陣列,便可以實現很多衍生的可持久化功能 例如 可持久化並查集 如題,你需要維護這樣的乙個長度為 n n n 的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操...

可持久化線段樹(主席樹)及可持久化陣列

定義 可以訪問歷史版本的線段樹為可持久化線段樹 可持久化線段樹之所以可以訪問歷史版本,是因為巨集觀上看,它為每個版本維護了一棵樹。當然,如果真的對每個版本建一顆樹,時間空間複雜度都hold不住。所以建立i版本的樹時,如果某顆子樹相對於i 1版本沒有變化,就可以直接使其父親對應的指標指向i 1版本的這...

模板 可持久化陣列(可持久化線段樹 平衡樹)

update 最後乙個點時間空間已經放大 標題即題意 有了可持久化陣列,便可以實現很多衍生的可持久化功能 例如 可持久化並查集 如題,你需要維護這樣的乙個長度為 n n n 的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操...