cpplib

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

View the Project on GitHub morioprog/cpplib

:heavy_check_mark: 1次元累積和
(datastructure/cumulativesum/cumulativesum.hpp)

概要

静的な配列に対する区間和クエリに答える.

計算量

使用例

Verified with

Code

/**
* @brief 1次元累積和
* @docs docs/datastructure/cumulativesum/cumulativesum.md
*/

template <typename T>
struct CumulativeSum {
    int sz;
    vector<T> data;
    CumulativeSum(const vector<T> &v, const T margin = 0)
        : sz(v.size()), data(1, margin) {
        for (int i = 0; i < sz; ++i) data.emplace_back(data[i] + v[i]);
    }
    T query(const int &l, const int &r) const {
        if (l >= r) return 0;
        return data[min(r, sz)] - data[max(l, 0)];
    }
    T operator[](const int &k) const {
        return query(k, k + 1);
    }
    void print() {
        for (int i = 0; i < sz; ++i) cerr << data[i] << ' ';
        cerr << endl;
    }
};
#line 1 "datastructure/cumulativesum/cumulativesum.hpp"
/**
* @brief 1次元累積和
* @docs docs/datastructure/cumulativesum/cumulativesum.md
*/

template <typename T>
struct CumulativeSum {
    int sz;
    vector<T> data;
    CumulativeSum(const vector<T> &v, const T margin = 0)
        : sz(v.size()), data(1, margin) {
        for (int i = 0; i < sz; ++i) data.emplace_back(data[i] + v[i]);
    }
    T query(const int &l, const int &r) const {
        if (l >= r) return 0;
        return data[min(r, sz)] - data[max(l, 0)];
    }
    T operator[](const int &k) const {
        return query(k, k + 1);
    }
    void print() {
        for (int i = 0; i < sz; ++i) cerr << data[i] << ' ';
        cerr << endl;
    }
};
Back to top page