區間樹狀陣列

2022-08-13 10:15:13 字數 1137 閱讀 4759

具體引數見注釋.首先是設定:

於是我們有了「可以足夠快進行區間更新」的樹狀陣列。

1/*2

*常量maxn用於設定樹狀陣列的尺寸大小3*/

4const

long

long maxn=500233;5

class

treelikearray629

}30/*31

*特別樹狀陣列單點更新操作,要求傳入位置和引數

32*/

33void add(long

long pos,long

long

key)

3440

/*41

*特別樹狀陣列多點更新操作,要求傳入起始位置、終止位置和引數

42*該操作將會使得[pos1,pos2]閉區間內所有元素得到更新

43*/

44void add(long

long pos1,long

long pos2,long

long

key)

4551

/*52

*樹狀陣列的常規操作,引數要求傳入陣列並指明求和位置

53*樹狀陣列基礎底層操作

54*/

55long

long getsum(long

long array,long

long

pos)

56return

ret;63}

64/*

65*從起始節點到目標節點閉區間求和[0,i]

66*/

67long

long getsum(long

long

pos)

6871

/*72

*求[pos1,pos2]閉區間內元素和

73*/

74long

long getsum(long

long pos1,long

long

pos2)

7578

/*79

*求pos單個元素的值

80*/

81long

long getsingle(long

long

pos)

8285 };

樹狀陣列 區間求和

樹狀陣列 是乙個查詢和修改複雜度都為log n 的資料結構,假設陣列a 1.n 那麼查詢a 1 a n 的時間是 log n 級別的。所以如果要解決 陣列中的元素不斷被修改,怎麼才能快速地獲取陣列中連續m個數的和 這個問題的話,用樹狀陣列就再好不過了 首先,什麼是樹狀陣列呢?樹狀陣列就是用另外乙個陣...

樹狀陣列 區間更新

樹狀陣列天生用來動態維護陣列字首和,其特點是每次更新乙個元素的值,查詢只能查陣列的字首和,但這個題目求的是某一區間的陣列和,而且要支援批量更新某一區間內元素的值,怎麼辦呢?實際上,還是可以把問題轉化為求陣列的字首和。首先,看更新操作update s,t,d 把區間a s a t 都增加d,我們引入乙...

樹狀陣列區間修改

有時,我們要支援區間修改,區間查詢。線段樹可以做到。但是樹狀陣列更好寫。1d的情況 設 b i a i a i 1 則 a i b 1 b i a 1 a l b 1 b 1 b 2 b 1 b l a 1 a l l b 1 l 1 b 2 b l sum l i 1 b i 如果我們維護 b i...