單點修改,區間求和
#define lowbit(x) x&(-x)
const int maxn=100010;
int n,bit[2*maxn];
int query(int x)
return s;
}void change(int x,int v)
}
區間修改,單點查詢
將原陣列儲存成差分陣列,根據差分的性質,在區間[l,r]上同時加上x可以處理成:
\(change(l,x)\)
\(change(r+1,-x)\)
查詢下標為i的元素值可以處理成:
\(query(i)\)
區間修改,區間求和
設定兩個bit,bit和bit2
在區間[l,r]上同時加上x可以處理成:
\(change(bit,l,x)\)
\(change(bit,r+1,-x)\)
\(change(bit2,l,k*l)\)
\(change(bit2,r+1,-k*(r+1))\)
區間[l,r]的求和可以處理成:
\(query(bit,r)*(r+1)-query(bit2,r)-(query(bit,l-1)*l-query(bit2,l-1))\)
const int maxn=100010;
ll bit[maxn],bit2[maxn];
void add(ll *t,int x,ll v)
ll sum(ll *t,int x)
void update(int l,int r,ll k)
ll getsum(int x)
ll query(int l,int r)
《一維樹狀陣列》模板
problem description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的...
樹狀陣列模板(一維的)
經典應用 1 士兵殺敵 1 樹狀陣列模板 input 5 21 2 3 4 5 1 32 4 output 69 include include using namespace std int c 1000006 儲存樹狀陣列 int n 元素個數 即節點個數 下標從1開始 求最小冪2的k次冪 in...
(一維 二維)樹狀陣列模板
一維或二維的區間修改都用到了差分的思想 詳細講解 1.單點修改 區間查詢 int lowbit int x void add int x,int v 給x位置加上v int ask int x 求字首和 return ans int range ask int l,int r 2.區間修改 單點查詢...