极好的博客讲解

lowbit函数

int lowbit(int x) {
    return x & (-x);
}

修改以及建树的函数

void add(int x, int k) {
    for (int i = x; i < N; i += lowbit(i))tr[i] += k;
}

一点要注意建树的数据范围,根据题目的要求来确定建树的范围。

查询函数

int query(int x) {
    int res = 0;
    for (int i = x; i; i -= lowbit(i))
        res += tr[i];
    return res;
}

遇到区间修改,单点查询和单点修改,区间查询建议使用树状数组来进行来操作,简单代码短,区间的修改可以维护差分数组来实现