1.lowbit函式
int
lowbit
(int i)
return i&
(-i)
;
lowbit函式的作用呢,就是返回二進位制數的最後一位1,在返回時附帶後面的0,即把二進位制的高位1全部清空,只留下最低位的1。舉個小栗子吧,10的二進位制是1010,則lowbit(1010)=0010,乙個數加乙個負號即把這個數的二進位製取反加一。那麼-10的二進位制就是0110,然後1010&0110即0010啦
2.lowbit函式對樹狀陣列所起的作用
把lowbit函式的值作為位置儲存的區域和,即可覆蓋全部位置,即每數字管理所屬的一段區間,這和線段樹是一樣的。
3.模板**:
#include
using
namespace std;
int tree[
100001];
int n =
100005
;//根據lowbit函式進行遍歷,保證樹狀陣列的更新,覆蓋所有位置
void
update
(int index,
int n)
}//利用lowbit函式進行遞減,一直減到1,從而求出字首和
intquery_sum
(int n)
return ans;
}void
main()
樹狀陣列模板
假設有一列數 1 i n 支援如下兩種操作 1.將ai的值加d。2.輸出ai ai 1 aj 1 i j n 樹狀陣列是一種特殊的資料結構,這種資料結構的時空複雜度和線段樹相似,但是它的係數要小得多 hdu 1166 敵兵布陣 題目 a國在海岸線沿直線布置了n個工兵營地。由於採取了某種先進的監測手段...
樹狀陣列模板
已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數數加上x 2.求出某乙個數的和 這種水水的樹狀陣列,博主就不做介紹,直接上 希望大家可以多多捧場!include include include include include include include include include ...
樹狀陣列模板
樹狀陣列 binary indexed tree bit fenwick tree 是乙個查詢和修改複雜度都為log n 的資料結構。主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改乙個元素的值 經過簡單修改可以在log n 的複雜度下進行範圍修改,但是這時只能查詢其中乙個元素的值。一,改點...