class Solution {
public int solution(int[][] board, int[][] skill) {
int n = board.length, m = board[0].length;
int[][] diff = new int[n + 2][m + 2];
for (int[] s : skill) {
int type = s[0], r1 = s[1], c1 = s[2], r2 = s[3], c2 = s[4], d = s[5];
int degree = (type == 1) ? -d : d;
diff[r1][c1] += degree;
diff[r1][c2 + 1] -= degree;
diff[r2 + 1][c1] -= degree;
diff[r2 + 1][c2 + 1] += degree;
}
// 행 누적
for (int i = 0; i < n + 1; i++) {
for (int j = 1; j < m + 1; j++) {
diff[i][j] += diff[i][j - 1];
}
}
// 열 누적
for (int j = 0; j < m + 1; j++) {
for (int i = 1; i < n + 1; i++) {
diff[i][j] += diff[i - 1][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (board[i][j] + diff[i][j] > 0) ans++;
}
}
return ans;
}
}