树状数组模板

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);
    }
} 
原文地址:https://www.cnblogs.com/Hilda/p/2628383.html