線段樹基礎

2021-08-08 20:41:16 字數 1085 閱讀 4915

平衡二叉樹是完全二叉樹,演算法複雜度為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國在海岸線沿...

線段樹基礎

寫得不錯啊。前段時間寫了篇 搞懂樹狀陣列 如果說樹狀陣列是優雅的,那麼線段樹就是萬能的。有句話就叫 樹狀陣列能做的線段樹都能做,但是樹狀陣列能做的堅決用樹狀陣列!因為線段樹本來的內容狠豐富的,主要有單點跟新 區間跟新,最值詢問 區間詢問 反正就是對於區間進行的動態跟新詢問都能較高效的完成。對於初學者...