替罪羊樹模版 普通平衡樹

2022-05-19 03:24:16 字數 2593 閱讀 4225

替罪羊樹,**賊長,我哭了。。。

#include#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5+5

;const

double alpha = 0.75

;struct

nodetzy[maxn];

intcnt,root;

///新建節點

void newnode(int &now,int

val)

///判斷是否平衡

bool imbalance(int

now)

vector

v;///中序列遍歷

void idr(int

now)

///拎起來

void lift(int l,int r,int &now)

int m=(l+r)>>1

;

///防止值相同跑到左邊去

while(m && l1

]].val)

m--;

now=v[m];

if(l1

,tzy[now].l);

else tzy[now].l=0

;

///向下取整,可以直接取

lift(m+1

,r,tzy[now].r);

tzy[now].size=tzy[tzy[now].l].size+tzy[tzy[now].r].size+1

; tzy[now].fact=tzy[tzy[now].l].fact+tzy[tzy[now].r].fact+1;}

void update(int now,int

end)

///暴力重構

///進行中序遍歷拉成直線,掛起來,然後分治拎起來

void rebuild(int &now)

lift(

0,v.size()-1

,now);

}///

檢查是否需要重構

///不能從下往上找

///重構條件----當前節點的左子樹或者右子樹的大小大於當前節點的大小乘以乙個平衡因子alpha

void check(int &now,int

end)

///終點在當前節點的左子樹

if (tzy[end].valcheck(tzy[now].l,end);

else

check(tzy[now].r,end);

}///

插入操作

void ins(int &now,int

val)

tzy[now].size++;

tzy[now].fact++;

///小於左插,大於右插

if(valins(tzy[now].l,val);

else

ins(tzy[now].r,val);

}///

惰性刪除

void del(int now,int

val)

tzy[now].fact--;

if (valdel(tzy[now].l,val);

else

del(tzy[now].r,val);

}int getrank(int

val)

//cout<}

//coutrank;

}int getnum(int

rank)

}return

tzy[now].val;

}int

main()

else

if (op==2

)else

if (op==3

)else

if (op==4

)else

if (op==5

)else

}return0;

}/*51 2

1 41 6

6 4*/

#include#include#include#include#includeusing namespace std;const int maxn = 1e5+5;const double alpha = 0.75;struct nodetzy[maxn];int cnt,root;///新建節點void newnode(int &now,int val)///判斷是否平衡bool imbalance(int now)vectorv;///中序列遍歷void idr(int now)///拎起來void lift(int l,int r,int &now)    int m=(l+r)>>1;    ///防止值相同跑到左邊去    while(m && l=rank)            now=tzy[now].l;        else            }    return tzy[now].val;}int main()else if (op==2)else if (op==3)else if (op==4)else if (op==5)else    }   return 0;}/*51 21 41 66 4*/

平衡樹 替罪羊樹

yangkai 身為平衡樹卻不做任何形式的旋轉,替罪羊樹可以稱得上是最暴力的平衡樹了。替罪羊樹 sgt 保留有二叉搜尋樹的基本性質,即對於任意乙個節點t,左兒子的所有節點比它小,右兒子的所有節點比它大。但是既然不基於翻轉,它怎樣維護平衡樹的優秀複雜度呢?sdt基於乙個叫做 重構 的操作,聽起來很是優...

初涉平衡樹 替罪羊樹

替罪羊樹 乙個看上去很玄學的名字 替罪羊 這個名字非常有趣 以至於一開始我並不覺得這是什麼好懂的東西 名字的 大概是由於它在刪除時候需要用被刪除節點的 左子樹最後乙個節點 右子樹第乙個節點來頂替這個節點。資料結構圈居然還有這麼腦洞的名字 好像還有乙個東西叫做朝鮮樹來著?替罪羊的精華在於,它相較於其他...

BZOJ3224 普通平衡樹 替罪羊寫法

全機房就剩下me不會替罪羊了 a 於是去寫了一道板子題 bzoj3224傳送門 如果你看見了 普通平衡樹,bzoj3224 這樣的字眼,都還想不起來題面的話 雖然替罪羊 原理簡單 思想粗暴 證明看不懂,不過它的寫法貌似還是不少。關於刪除操作 主要的差異可能還是在刪除部分。第一種方法是替換刪除法,刪除...