const int dx[] = {0, 1, -1, 0};
const int dy[] = {1, 0, 0, -1};
class Solution {
public:
int surfaceArea(vector<vector<int>>& grid) {
int res = 0;
int n = grid.size(), m = grid[0].size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] > 0) {
res += 2;
}
for (int k = 1; k <= grid[i][j]; k++) {
for (int p = 0; p < 4; p++) {
int x = i + dx[p];
int y = j + dy[p];
if (x < 0 || x >= n || y < 0 || y >= m) {
res += 1;
} else if (k > grid[x][y]) {
res += 1;
}
}
}
}
}
return res;
}
};