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.assign(n+1,vector<T>(m+1));
14 for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) {
15 //dat[i+1][j+1]=dat[i][j]-dat[i+1][j]-dat[i][j+1]+v[i][j];
16 dat[i][j]=v[i-1][j-1]+dat[i][j-1]+dat[i-1][j]-dat[i-1][j-1];
17 }
18 }
19
20 /// @brief 矩形領域 [l, r) × [u, d) の和を求める
21 T sum(int l, int r, int u, int d) {
22 return dat[r][d]-dat[l][d]-dat[r][u]+dat[l][u];
23 }
24
25private:
26 int n,m;
27 vector<vector<T>> dat;
28};
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