3
bool possibleToStamp(vector<vector<int>> &grid, int stampHeight, int stampWidth) {8
vector<vector<int>> diff(m + 1, vector<int>(n + 1, 0)); // 1-indexed9
for (int i = m - 1; i >= 0; i--) {10
for (int j = n - 1; j >= 0; j--) {13
diff[i + 1][j + 1 - w]--;14
diff[i + 1 - h][j + 1]--;15
diff[i + 1 - h][j + 1 - w]++;20
for (int i = m - 1; i >= 0; i--) {22
for (int j = 0; j <= n; j++) diff[i + 1][j] += diff[i + 2][j];24
for (int j = n - 1; j >= 0; j--) {25
cur += diff[i + 1][j + 1];30
cur += diff[i + 1][0];33
for (int i = 0; i < m; i++) {34
for (int j = 0; j < n; j++) {35
if (grid[i][j] != 1) return false;43
vector<vector<int>> pre;48
void init(vector<vector<int>> &grid) {49
m = grid.size(), n = grid[0].size();50
// initialize prefix sum51
pre.resize(m + 1, vector<int>(n + 1, 0)); // 1-indexed52
for (int i = 0; i < m; i++) {53
for (int j = 0; j < n; j++) {54
pre[i + 1][j + 1] = pre[i + 1][j] + pre[i][j + 1] - pre[i][j] + grid[i][j];58
bool canStamp(int i, int j) {59
if (i + 1 < h || j + 1 < w) return false;60
return pre[i + 1][j + 1] - pre[i + 1][j + 1 - w] - pre[i + 1 - h][j + 1] +61
pre[i + 1 - h][j + 1 - w] ==