【樹狀陣列模版】
注意:樹狀陣列x必須》0,因為lowbit(0) = 0,會死迴圈;
【單點更新區間查詢】在log(n)內修改單點,求出cnt[x] = a[1]~a[x
]之和
求區間[a,b]之和只要求出 sum(b)-sum(a-1)即可
#define rep(i,a,n) for(int i = a; i < n; i++)
#define repe(i,a,n) for(int i = a; i <= n; i++)
#define per(i,n,a) for(int i = n; i >= a; i--)
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
#define maxn 100010
int cnt[maxn],mx, a[maxn];
inline int lowbit(int x)
int sum(int x)
return ans;
}void update(int x, int num)
}
【區間更新單點查詢】在log(n)內修改區間a[1]~a[x]覆蓋次數,求出單點被覆蓋的次數
要修改區間[a,b]的覆蓋次數+1,可以 update(b,1), update(a-1,-1);
#define rep(i,a,n) for(int i = a; i < n; i++)
#define repe(i,a,n) for(int i = a; i <= n; i++)
#define per(i,n,a) for(int i = n; i >= a; i--)
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
#define maxn 100010
int cnt[maxn],mx, a[maxn];
inline int lowbit(int x)
int sum(int x)
return ans;
}void update(int x, int num)
}
樹狀陣列(BIT)
樹狀陣列 bit 是能夠完成下述操作的資料結構。在解題過程中,我們有時需要維護乙個陣列的字首和s i a 1 a 2 a i 但是不難發現,如果我們修改了任意乙個a i s i s i 1 s n 都會發生變化。可以說,每次修改a i 後,調整字首和s在最壞情況下會需要o n 的時間。當n非常大時,...
wenbao與樹狀陣列(BIT)
經典入門題,敵兵布陣 1 include 2 include 3 include 4using namespace std 56 int n,aa 50005 cc 50005 7 8int lowbit int x 11 12void add int x,int y 17 18 19int sum...
BIT二叉索引樹(樹狀陣列)
powered by phantom lsh將上面的求連續和問題稍微改進一下,現在需要支援一種新的操作 add x d 即把a x 增加d。這樣一來,如果通過字首和的方式計算就不能簡化計算了,因為每次修改乙個元素都要修改所有在它後面的字首和。有什麼解決辦法呢?我們需要用一種新的資料結構 bit二叉索...