樹狀陣列總結

2021-07-15 13:53:12 字數 437 閱讀 3846

樹狀陣列適合單個元素經常修改而且還反覆要求部分的區間的和的情況。

樹狀陣列的所有題線段樹都可以寫,但相對而言程式設計效率和程式執行效率更加高

c只是乙個求和工具 ,每個c[i]最後乙個元素都是a[i] ,  c[i] 中有lowbit[i]個元素,所以c[i] 就是 a[i-lowbit[i]+1]~a[i] 的和

c的計算:c[k] = sum(k) – sum(k-lowbit(k))

a[k]的更新:對於所有k之後的lowbit[k]的倍數的元素都要更新

sum[k]的計算:對於所有k之前的lowbit[k]的倍數的元素都要加上

**如下:

void modify(int p,int val)

}int quarysum(int p)

return sum;

}

樹狀陣列總結

樹狀陣列的基本知識已經被各種大牛和菜鳥講到爛了,我就不多說了,下面給出基本操作的 假定原陣列為a 1.n 樹狀陣列b 1.n 考慮靈活性的需要,使用int a傳陣列。define lowbit x x x int sum int a,int x void update int a,int x,int...

樹狀陣列總結

樹狀陣列是對乙個陣列改變某個元素和求和比較實用的資料結構。兩中操作都是o logn 在解題過程中,我們有時需要維護乙個陣列的字首和s i a 1 a 2 a i 但是不難發現,如果我們修改了任意乙個a i s i s i 1 s n 都會發生變化。可以說,每次修改a i 後,調整字首和s在最壞情況下...

樹狀陣列總結

今天學習了一下樹狀陣列,做乙個簡單總結。樹狀陣列可分為兩種操作,1 修改單個點,統計區間和 一般為 向上修改 update1 向下統計 sum1 2 修改區間,統計單個點 一般為向下修改 update2 向上統計 sum2 主要模板如下 int c n int lowbit int x 用於確定區間...