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); } }