public class NumMatrix
{
readonly int[,] arr;
public NumMatrix(int[][] matrix)
{
var rows = matrix?.Length ?? 0;
var cols = rows == 0 ? 0 : (matrix.First()?.Length ?? 0);
arr = new int[rows + 1, cols + 1];
for (var i = 0; i < rows; i++)
for (var j = 0; j < cols; j++)
arr[i + 1, j + 1] = matrix[i][j] + arr[i, j + 1] + arr[i + 1, j] - arr[i, j];
}
public int SumRegion(int row1, int col1, int row2, int col2)
{
row1++; col1++;
row2++; col2++;
return arr[row2, col2] - arr[row1 - 1, col2] - arr[row2, col1 - 1] + arr[row1 - 1, col1 - 1];
}
}