树状数组 模板

来源:互联网 发布:20174g网络哪家网速快 编辑:程序博客网 时间:2024/04/28 07:06

可以快速求区间和等问题,查询更新复杂度都是lgn, 常数比线段树低。

一维树状数组:

long long c[100010];int n;inline int lowbit(int x) {    return x & -x;}void update(int idx, int v) {    while (idx <= n) {        c[idx] += v;        idx += lowbit(idx);    }}long long query(int x) {// The sum of 1 to x    long long ans = 0;    while(x > 0) {        ans += c[x];        x -= lowbit(x);    }    return ans;}

二维树状数组:

long long BI_tree[1010][1010];int nx, ny;inline int lowbit(int x) {    return x & -x;}void update(int x, int y, int v) {    for(int i = x; i <= nx; i += lowbit(i))        for(int j = y; j <= ny; j += lowbit(j))            BI_tree[i][j] += v;}long long query(int x, int y) {    long long ans = 0;    for(int i = x; i > 0; i -= lowbit(i))        for(int j = y; j > 0; j -= lowbit(j))            ans += BI_tree[i][j];    return ans;}