如图:A为远数组,C为树状数组
代码模板:
int lowbit(int x){ // 2^k
return x & -x;
}
void update(int i, int v){ // 单点修改
while(i <= n){
c[i] += v;
i += lowbit(i);
}
}
int query(int i){ // 单点查询(树状数组只能查询前缀总长度)
int ans = 0; // 若查询L~R区间,则为 C[R] - C[L - 1] ;
while(i > 0){
ans += c[i];
i -= lowbit(i);
}
return ans;
}