아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

샌드캐슬 2

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

요약
인접한 칸으로만 이동하며 매번 높이가 낮아지는 경로를 따라갔을 때 방문한 칸들이 정확히 직사각형을 이루는 경우의 수를 구합니다.
난이도

어려움10점 중 9점

유형
정렬, 분할 정복, 구현
정답자
아직 제출이 없습니다

문제

JOI-kun은 모래사장에서 놀면서 모래성을 만든다. 모래성은 HH개의 행과 WW개의 열로 이루어진 직사각형 모래 영역 안에 있다. 북쪽에서 ii번째 행, 서쪽에서 jj번째 열에 있는 칸의 높이는 Ai,jA_{i,j}이다. 모든 높이는 서로 다르다.

JOI-kun은 다음 행동을 했다. 먼저 칸 하나를 골라 그 칸에서 출발했다. 그다음 현재 칸에서 상하좌우 중 한 방향의 인접한 칸으로 이동했다. 이동할 칸은 현재 칸보다 반드시 낮아야 한다. 이 이동을 0번 이상 반복했다.

그 결과 방문한 칸들을 위에서 보면 직사각형을 이룬다. JOI-kun이 방문한 칸들로 만들 수 있는 직사각형의 개수를 구하라.

입력

첫 줄에 정수 HH와 WW가 주어진다. 이어지는 HH개의 줄에는 각각 WW개의 정수가 주어지며, ii번째 줄의 jj번째 정수가 Ai,jA_{i,j}이다.

출력

JOI-kun이 방문한 칸들로 만들 수 있는 직사각형의 개수를 한 줄에 출력한다.

제한

H≥1H \ge 1, W≥1W \ge 1, H×W≤50 000H \times W \le 50\,000, 모든 ii, jj에 대해 1≤Ai,j≤10 000 0001 \le A_{i,j} \le 10\,000\,000이다. 서로 다른 두 칸의 높이는 항상 다르다.

예제3

  1. 예제 1

    입력
    1 5
    2 4 7 1 5
    
    예상 출력
    10
    
  2. 예제 2

    입력
    3 2
    18 10
    19 12
    17 13
    
    예상 출력
    15
    
  3. 예제 3

    입력
    3 5
    83 47 36 38 40
    13 10 26 68 67
    15 19 20 70 90
    
    예상 출력
    65