Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
cumulative_sum_2d.hpp
[詳解]
1#include"../../kyopro_library/template.hpp"
2
3/// @brief 2次元累積和
4/// @tparam T 群
5template<typename T>
7 CumulativeSum2D()=default;
8
9 /// @brief v から2次元累積和を構築する
10 template<typename U>
11 CumulativeSum2D(const vector<vector<U>>& v) {
12 n=v.size(),m=v.front().size();
13 dat=vector<vector<T>>(n+1,vector<T>(m+1,T(0)));
14 for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) {
15 dat[i][j]=v[i-1][j-1]+dat[i][j-1]+dat[i-1][j]-dat[i-1][j-1];
16 }
17 }
18
19 /// @brief 矩形領域 [l, r) × [u, d) の和を求める
20 T sum(int l, int r, int u, int d) {
21 return dat[r][d]-dat[l][d]-dat[r][u]+dat[l][u];
22 }
23
24private:
25 int n,m;
26 vector<vector<T>> dat;
27};
2次元累積和
CumulativeSum2D(const vector< vector< U > > &v)
v から2次元累積和を構築する
T sum(int l, int r, int u, int d)
矩形領域 [l, r) × [u, d) の和を求める
CumulativeSum2D()=default