1、二分数组
//采用了线段树中二分数组结构
//区间[b,e]求和
long long query(int k, int beg,int end, int b, int e){
if(b>end || e<beg) return 0;
if(b<=beg && e>=end)
return tree[k];
int mid = (beg+end)/2;
return query(2*k,beg, mid, b, e) + query(2*k+1, mid+1, end, b, e);
}
2、树状结构
int Lowbit(int k)
{
return k&(-k);
}
int getSum(int k)
{
long long s = 0;
while(k > 0)
{
s += tree[k];
k -= Lowbit(k);
}
return s;
}
//a表示当前值,b表示更新后的值
void update(int k, int a, int b)
{
while(k <= n)
{
tree[k] = tree[k] - a + b;
k = k + Lowbit(k);
}
}