模板 樹狀陣列(各種變形)

2021-08-22 04:43:21 字數 1629 閱讀 2251

原版::

const int n = 100100;

int sz[n];

int lowbit(itn x)

//更新節點

void update(int x,int d)

}//區間和 [0,x]

int getsum(int x)

return res;

}

區間修改,單點查詢::

//定義為 a[i] = c1[i]-c1[i-1]

//則 a[i] = c1[0]+ca[i]+...+c1[i]

const int n = 100100;

int a[n],c1[n];

int lowbit(int x)

void update(int x,int d)

}int getsum(int x)

return res;}/*

*輸入處理

* update(i,a[i]-a[i-1]);

**修改區間 [l,r] + ad

* update(l,ad);

* update(r+1,-ad);

**查詢位置 x 的值

* x = getsum(x);

**/

區間修改,區間查詢::

//定義 c1[i]  = a[i]-a[i-1];

//則 a[i] = c1[0]+c1[1]+...+c1[i]

//由 sum(1,k) = c1[1]+

// (c1[1]+c1[2])+

// (c1[1]+c1[2]+c1[3])+

// ...+

// (c1[1]+c1[2]+c1[3]+...+c1[k])

//可知sum(1,k) = k*(c1[1]+...+c1[k])-

// (0*c1[1] + 1*c1[2] + 2*c1[3] +...+ (k-1)*c1[k])

//則定義c2[i] = (i-1)*c1[i];const int n = 100100;

int a[n],c1[n],c2[n];

int lowbit(itn x)

void update(int *q,int x,int d)

}int getsum(int *q,int x)

return res;

}int sum(int x)

int query(int l,int r)

/* *輸入處理

* update(c1,i,a[i]-a[i-1]);

* update(c2,i,(i-1)*(a[i]-a[i-1]));

**修改區間 [l,r] + ad

* update(c1,l,ad);

* update(c1,r+1,-ad);

* update(c2,l,(l-1)*ad);

* update(c2,r+1,-r*ad);

**查詢區間和 [l,r]

* query(l,r);

*/

樹狀陣列模板

假設有一列數 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 的複雜度下進行範圍修改,但是這時只能查詢其中乙個元素的值。一,改點...