要求掌握樹狀陣列的以下操作:
樹狀陣列實現區間加和區間查詢。
記$a_i$為數列上面的第$i$個元素。
$delta_i=a_i-a_, (1\leq i\leq n)$。
$exdel_i=delta_i\times i$
拓展公式:
$$a_i=\sum_^delta_j$$
推導區間加
$\large add(l,r,v)$
$$delta_l+=v$$(好像沒什麼用啊……看看後面的詢問推導)$$exdel_l+=v*l$$
$$delta_-=v$$
$$exdel_-=v*(r+1)$$
推導區間詢問
$\large query(l,r)$
$$ans=\sum_^\sum_^delta_j\\=\sum_^(r-l+1)\times delta_i+\sum_^(r-l+1-(i-l))\times delta_i\\=\sum_^(r-l+1)\times delta_i+\sum_^(r+1-i)\times delta_i\\=\sum_^(r-l+1)\times delta_i+\sum_^(r+1)\times delta_i-\sum_^exdel_i\\=\sum_^(r+1)\times delta_i-\sum_^l\times delta_i-\sum_^exdel_i$$於是字首和隨便弄幾下就好了。
區間樹狀陣列
具體引數見注釋.首先是設定 於是我們有了 可以足夠快進行區間更新 的樹狀陣列。1 2 常量maxn用於設定樹狀陣列的尺寸大小3 4const long long maxn 500233 5 class treelikearray629 30 31 特別樹狀陣列單點更新操作,要求傳入位置和引數 32 ...
樹狀陣列 區間求和
樹狀陣列 是乙個查詢和修改複雜度都為log n 的資料結構,假設陣列a 1.n 那麼查詢a 1 a n 的時間是 log n 級別的。所以如果要解決 陣列中的元素不斷被修改,怎麼才能快速地獲取陣列中連續m個數的和 這個問題的話,用樹狀陣列就再好不過了 首先,什麼是樹狀陣列呢?樹狀陣列就是用另外乙個陣...
樹狀陣列 區間更新
樹狀陣列天生用來動態維護陣列字首和,其特點是每次更新乙個元素的值,查詢只能查陣列的字首和,但這個題目求的是某一區間的陣列和,而且要支援批量更新某一區間內元素的值,怎麼辦呢?實際上,還是可以把問題轉化為求陣列的字首和。首先,看更新操作update s,t,d 把區間a s a t 都增加d,我們引入乙...