樹狀陣列演算法分析

2021-12-30 04:48:39 字數 786 閱讀 1233

最近經常碰到樹狀陣列的問題, 就不如寫一寫對這個演算法的理解吧;

先偷一張圖:

大概理解就是, 對於 c陣列 是整個樹狀陣列裡的靈魂, 也可是tree 陣列, 其實a 陣列 是不存在的(可以這麼理解 ) 借勢,

c[8]= c[4] + c[6] + c[7] + a[8]

而 c[4] = c[2] +c[3] + a[4]

c[6] = c[5] + a[ 6]

對於 從 8 -4-6-7 這些數 經歷的變化 用k 來表示, 二進位制啥的 一系列轉化

變成這個:

k&(-k);

k 在變化, 但是變化的工程中就把所有的都訪問了,一級管一級的意思,

樹狀陣列維護:

void add(int k,int num)//維護新增值

}求 區間[1-x]的和

int sum(int x)//求區間[1,x] 的和

return sum;

}求 x - y 的和

int get_sum(int y,int x)// x-y區間的和

一般 的用法, 如果 我要求 x-- y 之間 的數值和, 我可以 先對add(y,1); 使 y 前面的 都 +1; 然後add(x,-1); 對x 前面的都-1 然後 x ,y 之間的 就是結果

樹狀陣列演算法分析

樹狀陣列演算法分析,最近經常碰到樹狀陣列的問題,就不如寫一寫對這個演算法的理解吧 先偷一張圖 大概理解就是,對於 c陣列 是整個樹狀陣列裡的靈魂,也可是tree 陣列,其實a 陣列 是不存在的 可以這麼理解 借勢,c 8 c 4 c 6 c 7 a 8 而 c 4 c 2 c 3 a 4 c 6 c...

演算法 樹狀陣列

演算法適用於求前k個整數的和,一般的做法是設定乙個sum陣列來表示 1 問題公升級一下 在查詢的過程中隨時給第x個整數加上乙個整數v,同樣要求查詢第k個整數的和。此時若還是原來的sum陣列,則要遍歷來更新,複雜度為o n 而用樹狀陣列則時間要更快。2 再來一題 很簡單的,別怕昂 計算序列中在元素左邊...

演算法 樹狀陣列

相信大家都會樹狀陣列的 單點修改,區間查詢 或者 區間修改,單點查詢 博主就不細講了。但是博主今天發現了乙個神奇的演算法 博主太菜 它可以使用樹狀陣列維護 區間修改,區間查詢 就是乙個優化過的字首和,使查詢和修改協調為 theta log 2n namespace fentree void add ...