만드는 중입니다

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

PlayerUnknown's Battlegrounds

시간 제한1.5초메모리 제한256 MB

요약
1부터 n·m까지의 순열이 채워진 n×m 격자에서 최솟값이 x인 부분 격자의 개수를 모든 x에 대해 구한다.
난이도

어려움10점 중 8점

유형
분할 정복, 구현, 완전 탐색, 수학
정답자
아직 제출이 없습니다

문제

리카는 PUBG(PlayerUnknown's Battlegrounds)를 하면서 게임에서 이기지 못했다. 그래서 이번에는 몇 가지 기술을 쓰기로 했다. 기술 덕분에 리카는 이제 게임에 있는 모든 플레이어의 위치를 분명하게 볼 수 있다.

게임의 맵은 n×mn \times m 크기의 격자로 나타낼 수 있다. 리카는 적의 활약을 바탕으로 전투력을 평가하는 소프트웨어를 사용한다. 지금 각 칸에는 적이 정확히 하나씩 있고, 모든 적의 전투력은 11부터 n⋅mn \cdot m까지의 정수를 한 번씩 사용한 순열을 이룬다. 리카는 아직 실력이 부족하기 때문에 항상 가장 약한 적에게 관심을 둔다(적의 전투력이 작을수록 약한 적이다).

ii행 jj열의 칸을 (i,j)(i,j)라고 쓰자. 부분 격자는 ((x1,y1),(x2,y2))((x_1,y_1), (x_2,y_2))로 정의되며, 여기서 1≤x1≤x2≤n1 \le x_1 \le x_2 \le n이고 1≤y1≤y2≤m1 \le y_1 \le y_2 \le m이다. 부분 격자 자체는 x1≤x≤x2x_1 \le x \le x_2이고 y1≤y≤y2y_1 \le y \le y_2인 칸 (x,y)(x, y)의 집합이다. 두 부분 격자 ((x1,y1),(x2,y2))((x_1,y_1), (x_2,y_2))와 ((x1′,y1′),(x2′,y2′))((x_1',y_1'), (x_2',y_2'))는 ((x1,y1),(x2,y2))=((x1′,y1′),(x2′,y2′))((x_1,y_1),(x_2,y_2)) = ((x_1',y_1'),(x_2',y_2'))일 때에만 같은 부분 격자이다.

리카는 부분 격자 안에서 가장 약한 적의 전투력이 xx인 부분 격자의 개수를 알고 싶어 한다. x=1,2,…,n⋅mx = 1, 2, \ldots, n \cdot m 각각에 대한 답을 구해 리카를 도와주자.

입력

입력의 첫째 줄에는 정수 nn과 mm이 주어진다(1≤n,m≤3001 \le n, m \le 300).

그다음 nn개의 줄이 주어진다. 그중 ii번째 줄에는 mm개의 정수가 주어지고, jj번째 정수는 (i,j)(i, j)에 있는 적의 전투력이다. 값들은 11부터 n⋅mn \cdot m까지의 정수를 한 번씩 사용한 순열을 이룬다.

출력

n⋅mn \cdot m개의 줄을 출력한다. 각 줄에는 정수 하나가 들어간다.

ii번째 줄의 정수는 x=ix = i에 대한 답이다.

예제1

  1. 예제 1

    입력
    2 3
    2 5 1
    6 3 4
    
    예상 출력
    6
    4
    5
    1
    1
    1