// Binary Indexed Tree. #include using namespace std; class Bit{ int n; vector bit; inline int offset(int x){ return (x & (-x)); } public: Bit(vector& arr){ n = arr.size(); bit.assign(n+1,0); for(int i=0; i 0 ){ res += bit[id]; id -= offset(id); } return res; } int sum_range(int l, int r){ return sum(r) - sum(l-1); } }; int main(){ int n = 5; vector arr = {1,2,3,4,5}; Bit x(arr); assert(x.sum_range(0,0) == 1); assert(x.sum_range(0,1) == 3); assert(x.sum_range(0,2) == 6); x.update(0,6); assert(x.sum_range(0,0) == 6); assert(x.sum_range(0,1) == 8); assert(x.sum_range(0,2) == 11); }