線段樹模板

2021-10-09 23:30:43 字數 1628 閱讀 2418

線段樹是一種二叉搜尋樹,什麼叫做二叉搜尋樹,首先滿足二叉樹,每個結點度小於等於二,即每個結點最多有兩顆子樹,何為搜尋,我們要知道,線段樹的每個結點都儲存了乙個區間,也可以理解成乙個線段,而搜尋,就是在這些線段上進行搜尋操作得到你想要的答案。

#include

//萬能標頭檔案

#define ll long long

//寫著方便

using

namespace std;

const

int n=

1e5+1;

//資料範圍,1e5+1等同於100001

struct node

tree[n <<2]

;//n<<2等同於n*4

ll wth[n]

;//儲存葉節點

void

build

(int p,

int l,

int r)

//建樹

ll mid =

(l+r)

>>1;

//二分

if(l <= mid)

build

(p <<

1,l, mid)

;//遞迴

if(r > mid)

build

((p <<1|

1), mid +

1, r)

;//同理,遞迴

tree[p]

.pre = tree[p <<1]

.pre + tree[

(p <<1|

1)].pre;

//更新父節結點

}void

update

(int p)

//放懶標記

void

add(

int p,

int l,

int r,

int w)

//對區間進行操作

if(tree[p]

.tag)

update

(p);

ll mid =

(tree[p]

.r + tree[p]

.l)/2;

//二分

if(l <= mid)

add(p <<

1,l,r,w);if

(r > mid)

add(

(p <<1|

1),l,r,w)

; tree[p]

.pre = tree[p <<1]

.pre + tree[

(p <<1|

1)].pre;

//更新父結點

}ll ask

(int p,

int l,

int r)

intmain()

build(1

,1,n);

//呼叫build函式建樹

for(

int i =

1;i <= m;i++

)else

}return0;

//結束程式~

}

模板推薦:p3372 【模板】線段樹 1

線段樹模板(模板)

參考部落格 持續更新。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 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...