照著指標版的打了個陣列版的,
發現自己上了一節c++語法課。
重構什麼的,最難在於找出深度最小的需要重構的節點,
畢竟多寫乙個函式不太優雅,
陣列又不像指標那麼方便直接修改。
如果你要傳回乙個變數的位址(因為你直接修改這個位址ch等等就直接跟著改了,十分方便)
函式不能寫 int&
得寫int *...............
刪除還是不要重構,太浪費了。。。。。。
#include#include#include#include#include#include#include#includeusing namespace std;
/*namespace scapegoat_tree
bool isbad(int now)
int root,tot;
int newnode(int v)
int seq[maxn],len;
void build(int &now,int l,int r)
int mid=(l+r)>>1;
now=seq[mid];
build(lc[now],l,mid-1);
build(rc[now],mid+1,r);
upd(now);
} void recycle(int now)
void rebuild(int &now)
int* insert(int& now,int v)
else
}void insert(int v)
void delete(int now,int rk) }
int rank(int v)
}return ret;
} int sank(int rk) }
void erase(int v) /*
}*/inline void read(int &res)
int main()
}
平衡樹 替罪羊樹
yangkai 身為平衡樹卻不做任何形式的旋轉,替罪羊樹可以稱得上是最暴力的平衡樹了。替罪羊樹 sgt 保留有二叉搜尋樹的基本性質,即對於任意乙個節點t,左兒子的所有節點比它小,右兒子的所有節點比它大。但是既然不基於翻轉,它怎樣維護平衡樹的優秀複雜度呢?sdt基於乙個叫做 重構 的操作,聽起來很是優...
替罪羊樹學習小記
替罪羊樹是一種沒有旋轉操作的二叉搜尋樹。或者說就是一顆二叉搜尋樹,暴力的那種。插入就是自上而下找到應該插入的地方而後插進去。我們知道這樣搞肯定是可以變成o n o n o n 的深度其複雜度的保證依賴於重構。即一棵子樹不平衡直接提出來重構成完全二叉樹。不平衡的定義為 m ax siz x0 siz ...
替罪羊樹學習日記
昨天晚上wq學長講課,講完讓人略微懵逼的kd tree,學長心血來潮要講替罪羊樹 學長 儘管這個玩意又臭又長,但是我從學會一直打到了退役,你們今天晚上和明天上午可以不看板子自己yy一下 一向乖巧聽話 人慫膽小 的我覺得學長說得對啊,然後第二天早上我欣然開始了替罪羊樹之旅,並不知道後面等著我的是什麼 ...