树状数组模板

int c[N], n; 

int Lowbit(int t)  //求某一点的管辖范围

{

    return t&(t^(t-1));  //也可以写成 return t&(-t);

}

int Sum(int end)   //求区间和

{

    int sum = 0;

    while(end > 0)

    {

        sum += c[end];

        end -= Lowbit(end);

    }

    return sum;

}

void add(int li, int val) //开始构建一个树状数组, 也可以修改数组

{

    while(li<=n)

    {

        c[li] += val;

        li += Lowbit(li);

    }

} 

你可能感兴趣的:(树状数组)