fast range sum queries while also being able to modify elements
similar to segtree but can only do sums etc.

class BIT {
private:
    int len;
    vector<int> arr;
    vector<int> bit;
 
public:
    BIT(int n) : len(n), arr(n, 0), bit(n + 1, 0) {}
 
    BIT(const vector<int> &arr) : len(arr.size()), arr(len), bit(len + 1) {
        for (int i = 0; i < len; i++) {
            set(i, arr[i]);
        }
    }
 
    void set(int i, int x) {
        add(i, x - arr[i]);
    }
 
    void add(int i, int d) {
        arr[i] += d;
        for (i++; i <= len; i += i & -i) {
            bit[i] += d;
        }
    }
 
    int pref_sum(int i) {
        int s = 0;
        for (i++; i > 0; i -= i & -i) {
            s += bit[i];
        }
        return s;
    }
 
    int range(int a, int b) {
        return pref_sum(b) - (a > 0 ? pref_sum(a - 1) : 0);
    }
};