私は実際に行うものの、2次元差分理論は、非常に単純であるときの質問の束
1つ星の境界は、減算時に前方に移動する必要が含まれて
2.私は、ゼロから始めて、サイクルタイムは非常に不便です
常に混乱3.x1、X2、Y1、Y2
書式#include <cstdioを> 使用して 名前空間はstdを、 const int型 N = 2001 ; INT 和[N] [N]。 int型のmain(){ int型、nは scanf関数(" %のD "、&N) 以下のために(INT iが= 0 ; I <N; I ++ ){ int型のX、Y、W。 scanf関数(" %D%D%D "、およびX&Y、&W)。 和[X] [Y] + = W。 } 以下のために(INT iが= 1 ; I <Nを; iが++ ){ 和[I] [ 0 ] =和[I] [ 0 ] +和[I - 1 ] [ 0 ]。 和[ 0 ] [I] =合計[ 0 ] [I] +和[ 0 ] [I - 1 ]。 } 以下のために(INT iは= 1 ; I <N; I ++ ) のための(INT J = 1、J <N; J ++ ) 和[I] [J] =和[I] [J] +和[I - 1 ] [J] +和[I]、[J - 1 ] -和[I - 1 ] [J - 1 ]。 int型Q; scanf関数(" %のD "、&Q)。 一方、(q-- ){ int型X1、Y1、X2、Y2。 scanf関数(" %D%D%D%D "、&X1、Y1、X2&&&Y2)。 int型ANS; もし(X1> 0 && Y1> 0 ) ANS =和[X2] [Y2] -和[X2] [Y1 - 1 ] -和[X1 - 1 ] [Y2] +和[X1 - 1 ] [Y1 - 1 ]。 それ以外の 場合(X1 == 0 && Y1!= 0 ) ANS =和[X2] [Y2] -和[X2] [Y1 - 1 ]。 それ以外の 場合(X1> 0 ) ANS =和[X2] [Y2] -和[X1 - 1 ] [Y2]。 他の ANS = 合計[X2] [Y2]。 printf(" %dの\ n " 、ANS)。 } リターン 0 ; }