在树状数组中,如果涉及到区间更新,我们可以多维护一棵BIT2:
Update Query Update(BITree1, l, val) Update(BITree1, r+1, -val) UpdateBIT2(BITree2, l, val*(l-1)) UpdateBIT2(BITree2, r+1, -val*r) Range Sum getSum(BITTree1, k) *k) - getSum(BITTree2, k)
/*
* Binary Indexed Tree: Range Update & Rangre queries
* Complexity: O(qlog(n)) (q:query times, n:size of BIT)
* Mantain another BIT(BIT2)
*
* Update(l, r, val): Add 'val' to all elements in the