Library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub Kyo-s-s/Library

:heavy_check_mark: CumulativeSum
(Data_structure/CumulativeSum.hpp)

累積和

コンストラクタ

CumulativeSum<T> cum(vector<T> v)
計算量

sum

(1) T cum.sum(int r)
(2) T cum.sum(int l, int r)
制約
計算量

Verified with

Code

template<class T> struct CumulativeSum {
    int n;
    vector<T> data; 
    bool builded = false;
    CumulativeSum(int n) : n(n), data(n + 1) {}
    CumulativeSum(const vector<T> &v) : n(v.size()), data(n + 1) {
        for (int i = 0; i < n; i++) {
            data[i + 1] = v[i];
        }
    }

    void build() {
        for (int i = 0; i < n; i++) {
            data[i + 1] += data[i];
        }
        builded = true;
    }

    T sum(int r) {
        if (!builded) build();
        assert(0 <= r && r <= n);
        return data[r];
    }

    T sum(int l, int r) {
        assert(0 <= l && l <= r && r <= n);
        return sum(r) - sum(l);
    }

};
#line 1 "Data_structure/CumulativeSum.hpp"
template<class T> struct CumulativeSum {
    int n;
    vector<T> data; 
    bool builded = false;
    CumulativeSum(int n) : n(n), data(n + 1) {}
    CumulativeSum(const vector<T> &v) : n(v.size()), data(n + 1) {
        for (int i = 0; i < n; i++) {
            data[i + 1] = v[i];
        }
    }

    void build() {
        for (int i = 0; i < n; i++) {
            data[i + 1] += data[i];
        }
        builded = true;
    }

    T sum(int r) {
        if (!builded) build();
        assert(0 <= r && r <= n);
        return data[r];
    }

    T sum(int l, int r) {
        assert(0 <= l && l <= r && r <= n);
        return sum(r) - sum(l);
    }

};
Back to top page