class NumMatrix {
private:
vector<vector<int>>sum;
public:
NumMatrix(vector<vector<int>>& matrix) {
if(matrix.size())
{
vector<vector<int>>sumT(matrix.size(),vector<int>(matrix[0].size(),0));
for(int i = 0;i<matrix.size();i++)
{
for(int j = 0;j<matrix[i].size();j++)
{
if(j == 0) sumT[i][j] = matrix[i][j];
else sumT[i][j] = sumT[i][j-1] + matrix[i][j];
}
}
sum = sumT;
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
int ans = 0;
if(sum.size())
{
for(int r = row1;r<=row2;r++)
{
if(col1 == 0)
{
ans += sum[r][col2];
}
else
{
ans += sum[r][col2] - sum[r][col1-1];
}
}
}
return ans;
}
};
/**
* Your NumMatrix object will be instantiated and called as such:
* NumMatrix* obj = new NumMatrix(matrix);
* int param_1 = obj->sumRegion(row1,col1,row2,col2);
*/