樹狀陣列的區間加以及區間詢問講解

2022-03-03 07:57:59 字數 755 閱讀 1347

要求掌握樹狀陣列的以下操作:

樹狀陣列實現區間加和區間查詢。

記$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,我們引入乙...