樹狀陣列(一)

2021-10-09 08:37:18 字數 850 閱讀 8231

樹狀陣列以二進位制為基礎,在陣列中建立了樹形關係,通過加減lowbit(x)實現樹上路徑的模擬,比較基礎的一類問題是樹狀陣列單點修改,此時樹狀陣列可以達到o(logn)。

補充lowbit(x):lowbit(x)表示x的二進位製上各位中為「1」的最低位,例如6(110)的lowbit(6)即2(10)。

陣列c儲存樹狀陣列,樹狀陣列求區間和類似字首和,從第一位開始將本單元(第i位)資料累加到i+lowbit(i)單元上,修改時僅需按這樣的路徑依次修改父節點知道根節點,訪問前n位和時從第n位開始依次訪問n-lowbit(n)單元,這是兩條不同的路徑,這樣操作可以保證字首和覆蓋全部單元。

以下為基礎的樹狀陣列單點修改和區間和查詢**

#include

#include

using

namespace std;

int a[

501000

],s[

501000

],n,m,k,l,r;

intlowbit

(int x)

void

add(

int x,

int k)

}int

find

(int x)

return num;

}int

main()

for(

int i=

1;i<=m;i++

)else

}return0;

}

樹狀陣列(一)

樹狀陣列,又稱二進位制索引樹,英文名binary indexed tree。一 樹狀陣列的用途 主要用來求解數列的字首和,a 0 a 1 a n 由此引申出三模擬較常見問題 1 單點更新,區間求值。hdu1166 2 區間更新,單點求值。hdu1556 3 求逆序對。hdu2838 二 樹狀陣列的表...

一維樹狀陣列

2013 05 30 20 54 329人閱讀收藏 舉報 一維陣列相信大家平時都是經常使用,對於一維陣列而言,查詢以及求和的時間複雜度分別為o 1 和 o n 今天我們介紹乙個新的資料結構 樹狀陣列英文名稱為binary index tree,直譯過來就是二進位制索引樹,我覺得二進位制索引樹更能說明...

一維樹狀陣列

一維樹狀陣列中的元素是某乙個區間內的n個元素和,對於n的值,用二進位制位和圖形結合則更容易理解。c1 0 0 0 1 1個元素 c2 0 0 1 0 2個元素 c3 0 0 1 1 1個元素 c4 0 1 0 0 4個元素 自己多寫幾個會容易發現 cn內的元素個數是n的二進位制表示形式的最低位1構成...