2D prefix sum
大きな2次元配列(
r
行と c
列の数値要素)を与えられたとき、各要素に対する二次元累積和 (2D prefix sum) を求めることが課題です。ここで、二次元累積和とは、座標 (0, 0)
から (r, c)
までの要素をすべて合計したもので、それは四隅 (0, 0)
, (r, 0)
, (r, c)
, (0, c)
で区切られる部分行列の要素合計を指します。行列のすべての位置に対して、この二次元累積和を効率的に計算できるでしょうか?
+ | + | + | + | ㅤ | ㅤ | ㅤ |
+ | + | + | + | ㅤ | ㅤ | ㅤ |
+ | + | + | + | ㅤ | ㅤ | ㅤ |
+ | + | + | + | ㅤ | ㅤ | ㅤ |
ㅤ | ㅤ | ㅤ | ㅤ | ㅤ | ㅤ | ㅤ |
ㅤ | ㅤ | ㅤ | ㅤ | ㅤ | ㅤ | ㅤ |

入力
入力の最初の行には、行列の行数
r
と列数 c
の2つの整数が与えられます (1 ≤ r, c ≤ 1000)。続く
r
行には、それぞれ c
個の整数が空白区切りで与えられます。これらは行列の要素を表します ()。 出力
プログラムは、二次元累積和行列を表す
c
個の数値を含む r
行を出力してください。 例
入力 | 出力 |
3 5
1 2 -3 4 6
-1 3 8 4 0
0 1 -2 0 5 | 1 3 0 4 10
0 5 10 18 24
0 6 9 17 28 |
Constraints
Time limit: 6 seconds
Memory limit: 512 MB
Output limit: 15 MB