lowbit实现
/*
x&(-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。
比如x=32,其中2的最大次方因子为2^5,故x&(-x)结果为32;当x=28,其中2的最大次方因子为4,故x & (-x)结果为4。
当x=24,其中2的最大次方因子为8,故 x&(-x)结果为8。
*/
int lowbit(int x)
{
return x&-x;
}
求和实现
//求和[1,pos]
int get_sum(int pos)
{
int res=0;
while(pos>0)
{
res+=bit[pos];
pos-=lowbit(pos);
}
return res;
}
更新操作
//给pos位置加上delta(变量,增量)
int Update(int pos,int n,int delta)
{
while(pos<=n)
{
bit[pos]+=delta;
pos+=lowbit(pos);
}
}