模板 線段樹(求和)

2021-10-02 17:49:22 字數 1091 閱讀 6185

線段樹是一種二叉樹可以用陣列來實現

儲存需要的空間為

n往上的2^n取整再乘以2

如 28 -> 32 x 2 -> 64足夠了

我們規定根節點為1

發現每個節點的左子節點為父節點的兩倍,右子節點為父節點的兩倍加一

//更新父節點

void

build

(int l,

int r,

int rt)

//rt---root表示當前的節點

int m =

(l + r)

>>1;

build

(l, m, rt <<1)

;build

(m +

1, r, rt <<1|

1);pushup

(rt);}

void

pushdown

(int rt,

int len)

}void

update

(int l,

int r,

int c,

int l,

int r,

int rt)

//[l,r]區間數加上c

pushdown

(rt, r-l+1)

;int m =

(l + r)

>>1;

if(l <= m)

update

(l, r, c, l, m, rt <<1)

;if(m < r)

update

(l, r, c, m +

1, r, rt <<1|

1);pushup

(rt);}

intquery

(int l,

int r,

int l,

int r,

int rt)

線段樹 區間求和模板 (區間修改)

include include include include include include include include include define mem a memset a,0,sizeof a define mem2 a memset a,1,sizeof a define mod ...

線段樹 求和

本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 time limit 1 sec memory limit 128 mb submit 187 solved 130 submit status web board 給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。注意 ...

線段樹 區間求和

給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。輸入資料第一行包含兩個正整數n,m n 100000,m 500000 以下是m行,每行有三個正整數k,a,b k 0或1,a,b n k 0時表示將a處數字加上b,k 1時表示詢問區間 a,b 內所有數的和。對於每個詢問輸出對應的答...