具體引數見注釋.首先是設定:
於是我們有了「可以足夠快進行區間更新」的樹狀陣列。
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...