문제에 나와있는 것처럼 왼쪽아래에서부터 오른쪽위 까지 성장 정보를 담을 배열을 사용한다.(2*m - 1 개)
문제에서 조건을 잘 살펴보면 성장도는 감소하지 않는다고 했으므로 어떤 한 위치의 성장도는 무조건 그 위치 바로 위쪽의 성장도를 따른다.
0열을 제외한 모든 열은 그 열의 0행의 누적 성장치 만큼 성장한다.
그러므로 가장자리의 누적 성장치를 기록하고, 0열은 따로 출력, 나머지 열은 해당 열의 0행 누적 성장치를 출력하면 된다.
import java.io.*;
import java.sql.Array;
import java.util.*;
public class Main {
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int[][] map;
static int[] grow_weight;
static int[][] grow;
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
grow = new int[n][3];
grow_weight = new int[2*m-1];
for (int i = 0; i < 2*m-1; i++) {
grow_weight[i] = 1;
}
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int a= Integer.parseInt(st.nextToken());
int b= Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
for (int l = a; l < a + b; l++) {
grow_weight[l]++;
}
for (int l = a+b; l < 2*m-1;l++)
grow_weight[l]+=2;
}
for (int i = 0; i < m; i++) {
System.out.print(grow_weight[m-i-1] + " ");
for (int j = 1; j < m; j++) {
System.out.print(grow_weight[m + j - 1] + " ");
}
System.out.println("");
}
}
}