平衡二叉樹是完全二叉樹,演算法複雜度為o(logn)級別,建樹用二分法找到左右兩個子節點,直到不能繼續劃分節點,線段樹主要用於處理一段連續區間的插入、查詢、統計、查詢等操作,線段樹的執行時間主要是
1、對於任意兩個節點的區間,要麼完全包含,要麼互不相交
線段樹模板
void build(int node,int left,int right)
update(int node ,int left ,int right ,intpoint ,int value)
int mid=(left+right)/2;
if(point<=mid)update(node*2,left,mid,point,value);
elseupdate(node*2+1,mid+1,right,point,value);
維護區間屬性的操作;
update(int node ,int left ,int right ,int l,int r ,int value)
int mid=(left+right)/2;
if(left<=mid) update(node*2+1,left,mid,point,value);
if(right>mid) update(node*2,mid+1,right,point,value);
維護區間屬性的操作;
query(int node ,int left ,int right ,int l,int r) { //單點查詢
if(left>=l&&right<=r) return 狀態值;
int mid=(left+right)/2;
int temp1=0,temp2=0;
if(left<=mid) temp1=query(node*2 ,left,mid ,l ,r);
if(right>mid temp2=query(node*2+1 ,mid,right ,l ,r);
return 要求的狀態值;(如max(temp1,temp2);)
從通過對點的操作到對區間的操作,點的操作是通過不斷的向下找點(找到點的標誌是左右端點值相同),區間的操作是尋找每乙個包含於需要操作的的子區間
線段樹 01 線段樹基礎
物理上 public class segmenttree public int getsize public e get int index 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引 private int leftchild int index 返回完全二叉樹的陣列表示中...
線段樹 基礎
d 基礎 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿...
線段樹基礎
寫得不錯啊。前段時間寫了篇 搞懂樹狀陣列 如果說樹狀陣列是優雅的,那麼線段樹就是萬能的。有句話就叫 樹狀陣列能做的線段樹都能做,但是樹狀陣列能做的堅決用樹狀陣列!因為線段樹本來的內容狠豐富的,主要有單點跟新 區間跟新,最值詢問 區間詢問 反正就是對於區間進行的動態跟新詢問都能較高效的完成。對於初學者...