📚Library

This documentation is automatically generated by competitive-verifier/competitive-verifier

View on GitHub

:warning: library/ds/fenwickTree_0indexed.hpp

Code

template <class T> struct FenwickTree {
    int n;
    vector<T> data;
    FenwickTree() : n(0) {}
    FenwickTree(int n) : n(n), data(n, 0) {}

    // a[i] += x
    void add(int i, T x) {
        for (int p = i + 1; p <= n; p += p & -p)
            data[p - 1] += x;
    }
    // [0, r)
    T sum(int r) {
        T s(0);
        for (int p = r; p > 0; p -= p & -p)
            s += data[p - 1];
        return s;
    }
    // [l, r)
    T sum(int l, int r) { return sum(r) - sum(l); }
};
#line 1 "library/ds/fenwickTree_0indexed.hpp"
template <class T> struct FenwickTree {
    int n;
    vector<T> data;
    FenwickTree() : n(0) {}
    FenwickTree(int n) : n(n), data(n, 0) {}

    // a[i] += x
    void add(int i, T x) {
        for (int p = i + 1; p <= n; p += p & -p)
            data[p - 1] += x;
    }
    // [0, r)
    T sum(int r) {
        T s(0);
        for (int p = r; p > 0; p -= p & -p)
            s += data[p - 1];
        return s;
    }
    // [l, r)
    T sum(int l, int r) { return sum(r) - sum(l); }
};
Back to top page