摘自這裡
(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...