樹狀陣列(一)

2021-06-21 20:07:29 字數 883 閱讀 3899

樹狀陣列,又稱二進位制索引樹,英文名binary indexed tree。

一、樹狀陣列的用途

主要用來求解數列的字首和,a[0]+a[1]+...+a[n]。

由此引申出三模擬較常見問題:

1、單點更新,區間求值。(hdu1166)

2、區間更新,單點求值。(hdu1556)

3、求逆序對。(hdu2838)

二、樹狀陣列的表示

1、公式表示

設a為乙個已知的數列。c為樹狀陣列。則會有

c[i]=a[j]+...+a[i];j=i&(-i)=i&(i^(i-1))。

2、圖形表示

(注:1、最下面的一行表示陣列a,上面的二進位制表示的部分是c;

從以上可以發現:

1、樹狀陣列c是表示普通陣列a的一部分的和。

2、小標為奇數時,c[i]只能管轄乙個a[i]。

3、c[i]的最後乙個數一定是a[i]。

一維樹狀陣列常用的3

個函式

int lowbit(int x) //取x的最低位1,比如4,則返回4,如5,則返回1

void update(int i, int val) //將第i個元素增加val

}int sum(int i) //求前i項的和

return s;

}

樹狀陣列(一)

樹狀陣列以二進位制為基礎,在陣列中建立了樹形關係,通過加減lowbit x 實現樹上路徑的模擬,比較基礎的一類問題是樹狀陣列單點修改,此時樹狀陣列可以達到o logn 補充lowbit x lowbit x 表示x的二進位製上各位中為 1 的最低位,例如6 110 的lowbit 6 即2 10 陣...

一維樹狀陣列

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構成...