给一个初始值全为0的数列a[1],a[2],...a[n],能够在O(logn)时间内完成以下操作
1)给定i,计算a[1]+a[2]+...+a[i]
2)给定i和x,执行a[i]+=x
代码:
//区间[1,n]
int bit[max_n+1],n;
int sum(int i)
{
int s=0;
while(i>0)
{
s+=bit[i];
i-=i&-i;
}
return s;
}
void add(int i,int x)
{
while(i<=n)
{
bit[i]+=x;
i+=i&-i;
}
}