二話不多說,直接上公式:
pos(l,r) = ( l + r ) | ( l != r )
這個樣子適用於不用動態開點的線段樹分配編號,相比直接son[x][l or r] = x<<1|(l or r),不用多開4倍空間;
所有葉子節點編號為2,4,6,8,...,2r全為偶數
顯然若l != r , pos(l , r)為奇數;
觀察所有l !=r 的節點,那麼他的編號範圍是 2l 到2r對吧;
設中點為mid,那麼他兒子的編號分別是pos(l , mid) 和pos(mid+1 , r);
他左兒子的編號範圍是2l到2mid,右兒子編號範圍是2mid+2到2r對吧;
並且這個點pos(l,r) = 2mid + 1;
所以這個點的編號是被均分下去了的;
所以這個樣子分配編號是不會衝突的;
樹上莫隊 樹剖 神奇的姿勢 嘿嘿嘿嘿的 zy
題目描述hjwjssb成年了,父母覺得他是時候去找乙個喜歡的人。他遇到了室友hao,在和hao一起同居的兩年,hjwjssb不知不覺中對hao產生了一點好感。後來hjwjssb換了乙個公司,遇到了同事ciewai。ciewai對他很好,經常加班陪他,等他一起回家,hjwjssb接觸ciewai這麼久...
線段樹 02 構建線段樹
public inte ce merger 不能再縮小的基本問題是 對treeindex指向的節點的情況進行討論 public class segmenttree 在treeindex的位置建立表示區間 l.r 的線段樹 private void buildsegmenttree int treei...
線段樹 01 線段樹基礎
物理上 public class segmenttree public int getsize public e get int index 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引 private int leftchild int index 返回完全二叉樹的陣列表示中...