两两求和
但我们依次求1到n的时候有些数据用不到
int lowbit
{
return x&-x;//求某个数字二进制下最后一个1的位置,这里恰好为这个下标的层数
}
那么可以显然:如果我们想要某一个位置+b
void add(int p,int b)
{
for(int i=p;i<=m;i+=lowbit(i))
{
s[i]+=b;
}
}
想求1到某一位的和
int query(int p)
{
for(int i=p;i;i-=lowbit(i))
{
int ans=0
ans+=s[i];
return ans;
}
}
那么求l到r的和
query(r)-query(l-1)