非遞迴版線段樹模板

2021-09-14 03:37:34 字數 1096 閱讀 7546

摘自這裡

(0)定義:

#define maxn 100007

int a[maxn]

,n,n;

//原陣列,n為原陣列元素個數 ,n為擴充元素個數

int sum[maxn<<2]

;//區間和

int add[maxn<<2]

;//懶標記

(1)建樹:

void

build

(int n)

}

(2)點修改:

a[l]+=c

void

update

(int l,

int c)

(3)點修改下的區間查詢:

求a[l…r]的和(點修改沒有使用add所以不需要考慮)

**非常簡潔,也不難理解,

s和t分別代表之前的論述中的左右藍色節點,其餘的**根據之前的論述應該很容易看懂了。

st1 在s和t的父親相同時值為0,終止迴圈。

兩個if是判斷s和t分別是左子節點還是右子節點,根據需要來計算sum

int

query

(int l,

int r)

return ans;

}

(4)區間修改:

a[l.

.r]+

=cvoid

update

(int l,

int r,

int c)

//更新上層sum

for(

;s;s>>=

1,t>>=1)

}

(5)區間修改下的區間查詢:

求a[l…r]的和

int

query

(int l,

int r)

//處理上層標記

for(

;s;s>>=

1,t>>=1)

return ans;

}

ZKW線段樹 非遞迴版本的線段樹

學習和參考 下面是支援區間修改和區間查詢的zkw線段樹模板,先記下來。include include include include include include include include include include include include include include inc...

線段樹模板(模板)

參考部落格 持續更新。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img xhrgdjcd 1613976863463 區間儲存在陣列中的下標對應為 12 3 4 5 6 7 8 9 10 11 12 13 14 15 四部分單點更新 根據題目的要求編寫自己的pushup,query...

線段樹的基礎非遞迴的使用

以下為基礎模板 原陣列下標 1 線段樹下標 線段樹下標 n 1 儲存下標 空出前和尾的乙個位置 原陣列下標 n 儲存下標 define maxn 100007 int a maxn sum maxn 2 add maxn 2 int n n為擴充元素的個數 int n n為原陣列元素的個數 void...