樹狀陣列,又稱二進位制索引樹,英文名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構成...