線段樹模板

2022-08-17 05:12:16 字數 2510 閱讀 1749

線段樹是一種常用的演算法,本人近日試著學習了一下,發現好難啊。。

下面是我學習了幾天打的模板

1

int a[100001],sum[100001]; //

sum表示線段樹,空間o(2n),a表示序列 23

//建立一顆線段樹

4void change(int

root)

7void buildtree(int root,int l,int

r)11

int mid= l+r>>1

;12 buildtree(root*2

,l,mid);

13 buildtree(root*2+1,mid+1

,r);

14change(root);

15}

1617

//單點修改q

18void change(int

root)

21void change (int root,int l,int r,int p,int

q)26

int mid=l+r>>1;27

if (p<=mid) change(root*2

,l,mid,p,q);

28else change(root*2+1,mid+1

,r,p,q);

29change(root);

30}

3132

//求區間和[l,r]

33int find(int root,int l,int r,int l,int

r) 39

40//

求最大子段和問題

41int l[100001],r[100001],ans[100001]; //

l表示字首和,r表示字尾和,ans表示答案

42void change(int

root)//

ans即為解 find中把sum改為ans即可

5051

//區間修改,區間加,打懶標記

52//

區間加 區間和

53 [l,r] +x

54int a[410000],sum[410000

];55

void pushdown(int k1)

58void addall(int k1,int l,int r,int l,int

r)64

int mid=l+r>>1

; pushdown(k1);

65 addall(k1*2

,l,mid,l,r);

66 addall(k1*2+1,mid+1

,r,l,r);

67change(k1);68}

69int find(int k1,int l,int r,int l,int

r)75

76//

有懶標記的線段樹

7778

79//

2.pushdown() -> 兩個標記的合併 +5 +6 => +11

80//

3.再給乙個節點打上懶標記的時候需要快速更新維護的資訊

int a[100001],sum[100001]; //sum表示線段樹,空間o(2n),a表示序列 

//建立一顆線段樹 void change(int root)void buildtree(int root,int l,int r)int mid= l+r>>1;buildtree(root*2,l,mid);buildtree(root*2+1,mid+1,r);change(root);}   

//單點修改qvoid change(int root)void change (int root,int l,int r,int p,int q)int mid=l+r>>1;if (p<=mid) change(root*2,l,mid,p,q);else change(root*2+1,mid+1,r,p,q);change(root);} 

//求區間和[l,r]int find(int root,int l,int r,int l,int r) 

//求最大子段和問題int l[100001],r[100001],ans[100001]; //l表示字首和,r表示字尾和,ans表示答案 void change(int root)//ans即為解 find中把sum改為ans即可  //區間修改,區間加,打懶標記//區間加 區間和 [l,r] +xint a[410000],sum[410000];void pushdown(int k1)void addall(int k1,int l,int r,int l,int r)int mid=l+r>>1; pushdown(k1);addall(k1*2,l,mid,l,r);addall(k1*2+1,mid+1,r,l,r);change(k1);}int find(int k1,int l,int r,int l,int r)

//有懶標記的線段樹

//2.pushdown() -> 兩個標記的合併 +5 +6 => +11//3.再給乙個節點打上懶標記的時候需要快速更新維護的資訊 

線段樹模板(模板)

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

線段樹模板

include include include using namespace std const int size 10010 struct node the node of line tree class linetree void updatem void updateline public ...

線段樹模板

單點更新,區間求最值 include include include include include define n 222222 using namespace std int num n struct tree tree n 4 void push up int root void build...