int lowbit(int i) { return i & -i;//或者是return i-(i&(i-1));表示求数组下标二进制的非0最低位所表示的值 } void update(int i,int val)//单点更新 { while(i<=n){ C[i]+=val; i+=lowbit(i);//由叶子节点向上更新树状数组C,从左往右更新 } } int sum(int i)//求区间[1,i]内所有元素的和 { int ret=0; while(i>0){ ret+=C[i];//从右往左累加求和 i-=lowbit(i); } return ret; }
原文:https://www.cnblogs.com/bxd123/p/10356315.html