【模版】(旧)BIT 树状数组

树状数组(BIT)

树状数组不仅仅只有求区间和的作用,还可以以此来查询区间最值或特殊值,(它的查询和插入操作都是O(logn)级别的);

它的最大好处就是简单易写,实现方便;

定义:

// * 数组大小
#define size (100)
// * 树状数组 
int bit[BITSZ]

单点添加函数:(以下是仅对求和操作的树状数组函数)

void Add (int k,int val) {
    while (k<=size) {
        bit[k]+=val;
        k+=k&-k;
    } 
  return;     
}

查询[1,k]的区间和函数:

int Sum (int k) {
    int sum=0;
    while (k>0) {
        sum+=bit[k];
        k-=k&-k;
    } 
  return sum;     
}

配合图如下:

原文地址:https://www.cnblogs.com/Ztraveler/p/6919996.html