關於樹狀陣列

2022-08-24 09:24:11 字數 683 閱讀 5958

樹狀陣列的核心在於對一段區間的修改和查詢,巧妙地把陣列用一顆樹表示,從而降低了對陣列的修改和查詢的複雜度。

首先引入lowbit()

int

lowbit(x)

如:x =1: 1 &-1

0000 0001 & 1111 1111 = 1

x = 6:   6  &  -6  

0000 0110 & 1111 1010 = 2

總結一下就是:

求出某個數二進位制表示從右起出現的第乙個1及後面的0一起表示的二進位制數,如6的二進位制表示為110,向左數第乙個為0,第二個為1,故lowbit(6) = 10(2) = 2(10)。

現在看樹狀陣列的圖:

我們可以發現沒個子節點的父親節點的下標就是該節點的下標 i + lowbit(i),利用這個特性,我們就可以得到對樹狀陣列的兩個操作函式

更新節點:

void add(int x, int

y)}

查詢區間:

int sum(int

x)

return

ans;

}

用這兩個函式就可以對樹狀陣列進行更新和查詢操作。

關於樹狀陣列

身為蒟蒻的我 終於學會了 樹狀陣列 但因為自己還是太蒟蒻 還是糊里糊塗的 所以寫個部落格理理思路 樹狀陣列的數學模型 樹狀陣列的劃分依據的原理是任何正整數都可以表示為2的冪相加的形式 如13 2 3 2 2 2 1 進而可以利用這一特性來進行區間求和 設想一下現在乙個序列 長度為n 現在要進行區間求...

關於樹狀陣列

樹狀陣列 binary indexed tree b.i.t fenwick tree 是乙個查詢和修改複雜度都為log n 的資料結構。主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改乙個元素的值 經過簡單修改可以在log n 的複雜度下進行範圍修改,但是這時只能查詢其中乙個元素的值 如果...

關於樹狀陣列的幾點總結

零 樹狀陣列的基本概念 1.概念 2.實現原理 3.特性 1.概念 這是樹狀陣列最基本的應用,也就是支援單點修改區間查詢 時間複雜度均為 2.實現原理 3.具體實現 不停獲取i的二進位制表示中的最後一位1所代表的值 將這個值設為b 在操作過程中 在迴圈中給i增加b之前 向c陣列中下標為i的地方增加x...