预备知识——前缀和
A为N个数所在的数组,B为另一个新的数组
令B数组的第 i 项为A数组的A1至Ai项之和
即:Bi = A0+A1+A2 + …+Ai
则有Bi = Bi-1 + A i(其中B0 = A0)
特别的,有时候为了方便,AB数组都从下标1开始
前缀和的主要用途?
区间求和!
二叉树
叶子结点代表A数组A[1]~A[8]
变化后
C[i]代表 子树的叶子结点的权值之和// 这里以求和举例
二进制最后一个1代表某个数,Ci从Ai往前数这么多项
方法1:(易于理解)
int lowbit(int x)
{
return x - ( x & (x - 1) ) ;
}
方法2:(更简洁)
int lowbit(int x)
{
return x & -x;
}