前言:現在還不是很懂,不過先把模板抄在這裡把。
介紹一下差分,乙個很簡單的東西。
一、簡介
已知陣列a為1,2,1,5,7,4
那麼差分陣列1,1,-1,4,2,-3
顯然,差分陣列就是當前項與前一項的差值。
容易得到,an就是差分陣列的前n項和。
二、那麼有什麼便利的地方呢?
我們假想一下,現在要給1至4的區間每個數加上1,那麼差分陣列會變成什麼樣呢,模擬一下得
a陣列2,3,2,6,8,5
差分陣列2,1,-1,4,1,-3
可以看到,只有下標為1和5的地方發生了變化。
剛才我們說到,差分陣列的前n項和就是an,那我們在差分陣列的1處加1,在5處減1,那麼1到4利用差分陣列字首和求an,an的值確實都加了1,當我們求a5以後的數的話,我們就不需要加1了,所以差分陣列a5處減1.
這樣,差分陣列的字首和仍然是an。
樹狀陣列+差分
#include using namespace std;
typedef long long ll;
ll n,m,tree[500009];
ll lowbit(ll x)
ll sumn(ll x)
return ans;
}void add(ll x,ll w)
}int main()
for(int i=1;i<=m;i++)
else}}
差分樹狀陣列
一 假設現在有乙個原陣列a 假設a 0 0 有乙個陣列d,d i a i a i 1 那麼 a i d 1 d 2 d i d陣列就是差分陣列 所以求a i 就可以用樹狀陣列維護d i 的字首和 即維護的是d i 的樹狀陣列 上面的數學思想可以實現區間修改,以及單點查詢。下附上 區間修改 1 n v...
差分 差分陣列 樹狀差分
原陣列 ai94 759差分陣列 bi9 5 3 24差分陣列的字首和94 759顯然通過求字首和可以做到單點查詢 他高效的地方在於區間修改,比如我們對區間 2,4 每個元素加上5,我們只需在差分陣列 b2 5,b5 5,然後求字首和即可 原陣列 ai94 759差分陣列 bi 903 2 1 差分...
樹狀陣列與差分
1.什麼是樹狀陣列?顧名思義,就是用陣列來模擬樹形結構唄。那麼衍生出乙個問題,為什麼不直接建樹?答案是沒必要,因為樹狀陣列能處理的問題就沒必要建樹。和trie樹的構造方式有類似之處。2.樹狀陣列可以解決什麼問題 可以解決大部分基於區間上的更新以及求和問題。3.樹狀陣列和線段樹的區別在 樹狀陣列可以解...