만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

우물 안 개구리

시간 제한8초메모리 제한1024 MB

요약
각 거리 d(1부터 h+w-2까지)마다 맨해튼 거리 d 이내에 자신보다 강한 개구리가 없는 개구리의 수를 셉니다.
난이도

보통10점 중 7점

유형
정렬, BFS, 행렬
정답자
아직 제출이 없습니다

문제

격자점이 h×wh \times w개 있고, 위에서 rr번째, 왼쪽에서 cc번째 위치를 (r,c)(r, c)라고 한다 (1≤r≤h1 \le r \le h, 1≤c≤w1 \le c \le w). 각 격자점에는 개구리가 한 마리씩 있다. 개구리마다 강도를 나타내는 값이 정해져 있으며, 위치 (r,c)(r, c)의 개구리 강도는 fr,cf_{r,c}이다.

그런데 개구리들은 모두 자신이 세상에서 가장 강하다고 믿는 우물 안 개구리다. 각 개구리는 자신보다 강한 개구리가 없는 범위를 직감적으로 알고 있으며, 그 범위 안에서만 활동함으로써 정체성을 지킨다.

두 위치 (r1,c1)(r_1, c_1)과 (r2,c2)(r_2, c_2) 사이의 거리는 ∣r1−r2∣+∣c1−c2∣|r_1 - r_2| + |c_1 - c_2|로 정의한다. 위치 (r,c)(r, c)의 개구리는 거리 dd 이내에 자신보다 엄격하게 강한 개구리가 없으면 그 범위에서 활동할 수 있다. 즉, ∣r−i∣+∣c−j∣≤d|r - i| + |c - j| \le d를 만족하는 모든 1≤i≤h1 \le i \le h, 1≤j≤w1 \le j \le w에 대해 fi,j≤fr,cf_{i,j} \le f_{r,c}이면, 위치 (r,c)(r, c)의 개구리는 거리 dd 범위에서 활동할 수 있다.

격자 위 개구리들이 얼마나 우물 안 개구리인지 나타내는 정도, 일명 井度(정도)를 파악하기 위해 프로그램을 작성하자. 각 거리 d=1,2,…,h+w−2d = 1, 2, \ldots, h + w - 2에 대해 거리 dd 범위에서 활동할 수 있는 개구리의 수를 구하는 프로그램을 작성하여, 프로그래밍 세계의 우물 안 개구리가 아님을 증명하자.

입력

입력은 여러 데이터셋으로 이루어진다. 각 데이터셋은 다음 형식으로 주어진다.

h w
f1,1 f1,2 ... f1,w
f2,1 f2,2 ... f2,w
...
fh,1 fh,2 ... fh,w

첫 줄에는 격자의 크기를 나타내는 정수 hh와 ww가 주어지며, 1≤h≤1,0001 \le h \le 1{,}000, 1≤w≤1,0001 \le w \le 1{,}000, h+w≥3h + w \ge 3을 만족한다. 이어서 hh줄에 걸쳐 각 줄마다 ww개의 정수가 주어지며, 이는 각 개구리의 강도다. rr번째 줄의 cc번째 정수가 위치 (r,c)(r, c)의 개구리 강도 fr,cf_{r,c}이며, 1≤fr,c≤1091 \le f_{r,c} \le 10^9이다. 입력의 끝은 두 개의 0으로 이루어진 줄이다. 데이터셋은 50개 이하다.

출력

각 데이터셋에 대해 h+w−2h + w - 2개의 정수를 공백으로 구분하여 한 줄에 출력한다. ii번째 정수는 거리 ii 이내에 자신보다 강한 개구리가 존재하지 않는 개구리의 수다.

예제1

  1. 예제 1

    입력
    4 5
    9 1 1 1 3
    5 2 1 3 1
    6 4 1 1 2
    4 4 3 2 8
    7 5
    24 18 10 34 43
    37 26 42 49 27
    10 41 3 19 29
    31 4 10 32 42
    44 25 41 14 28
    36 21 25 30 40
    1 43 8 40 44
    3 3
    1 1 1
    1 1 1
    1 1 1
    1 9
    1 2 3 4 5 4 3 2 1
    0 0
    
    예상 출력
    7 4 2 2 2 2 1
    9 5 3 3 3 1 1 1 1 1
    9 9 9 9
    1 1 1 1 1 1 1 1