zhw大神線段樹姿勢

2022-04-06 03:52:23 字數 875 閱讀 8841

for (i=131072; i<262144; i++)

tree[i][

0]=tree[i][1]=i;

for (i=131071; i>=1; i--)

tree[i][

0]=tree[i+i][0

], tree[i][

1]=tree[i+i+1][1

];void down(int

x)int work(int root,int l,int r,int

k) tree[root][

3]+=k*(r-l+1

);

//down(root);

int mid=(tree[root][0]+tree[root][1])/2

;

if (l<=mid)

work(root+root,l,min(mid,r),k);

if (r>mid)

work(root+root+1,max(mid+1

,l),r,k);

//tree[root][3]=tree[root+root][3]+tree[root+root+1][3];

return;}

int work2(int root,int l,int

r)while (q--)

if (a==2

)

}tree[i][

0] 表示編號最小的葉子

tree[i][

1] 編號最大的葉子

tree[i][

2] 以i為根,所有葉子一次性全部加的,

總共加了多少。

tree[i][

3] 以i為根,所有葉子的權值之和是多少

RMQ的ST寫法和線段樹寫法兩種姿勢

rmq問題為求區間最值的問題 線段樹可以在o logn 的時間複雜度內完成詢問操作。但是st演算法可以在常數時間內完成詢問操作 st演算法 基於動態規劃求區間最值的演算法。分為預處理和查詢兩部分 預處理 定義 f i j 為從 i開始到 i 2 j 1 區間內的最值 我們可以講這段2 j的區間分成兩...

線段樹 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 返回完全二叉樹的陣列表示中...