798の違いをAcWing行列https://www.acwing.com/problem/content/800/
書式#include <iostreamの> の#include <cstdioを> する#include <アルゴリズム> 使用して名前空間をSTD。const int型 N = 1005 ; int型[N] [N]。 INT B [N]、[N]。ボイド SERT(INT X1、INT Y1、INT X2、INT Y2、INT C) { B [X1] [Y1] + = C。 B [X2 + 1 ] [Y1] - = C。 B [X1] [Y2 + 1 ] - = C。 B [×2 + 1 ] [Y2 + 1 ] + = C。 } int型のmain() { int型N、M、Q。 CIN >> N >> M >> Q。 以下のために(INT iが= 1 ; I <= N; ++ I) のために(INT J = 1 ; J <= M; ++ j)は { CIN >> [I] [J]。 SERT(I、J、I、J、[I] [J])。 } 一方、(Q - ) { int値X1、Y1、X2、Y2、C。 CIN >> X1 >> Y1 >> X2 >> Y2 >> C。 ; SERT(X1、Y1、X2、Y2、C) } ため(INT I = 1 ; I <= N; ++ I) { ため(INT J = 1。 ; J <= M; ++ J) { B [ I] [J] = B [I- 1 ] [J] + B [I]、[J- 1 ] - B [I- 1 ] [J- 1 ] + B [I]、[J]; // 微分配列の評価は、元の接頭辞と配列である COUT << B [I] [J] << " " ; } COUT << ENDL; } 戻り 0 ; }
N、M、Q = マップ(INT、入力()。スプリット()) = [0 用の I における範囲(M + 5)] のための I における範囲(N + 5 )] B = [0 用のI 中範囲(M + 5)] のための I における範囲(N + 5 )] DEF インサート(X1、Y1、X2、Y2、C): B [X1] [Y1] + = C B [X1] [Y2 +1 ] - = C B [X 2 +1] [Y1] - = C B [X 2 +1] [Y2 + 1] + = C 用の私は、中範囲(1、N + 1 ) 行= [0] + リスト(マップ(INT、入力()スプリット())。) のために、J における範囲(1、M + 1 ): [I] [J] = 行[J] インサート(I、J、 I、J、[I] [J]) 一方、Q: Q - = 1つの X1、Y1、X2、Y2、C = 地図(INT、入力()スプリット()) インサート(X1、Y1、X2、Y2 、C) のための I における範囲(1、N + 1 ) のための J での範囲(1、M + 1 ): B [i]は[J] + = B [I-1]を[J] + B [i]は[J-1] - B [I-1] [J-1 ] 印刷(B [I] [J]、端= " " ) 印刷("" )