19세기 초, 호세인굴루 칸 사르다르는 강이 내려다보이는 평원에 궁전을 지으라고 명령했다. 평원은 n×m 격자로 나타낸다. 행은 0번부터 n−1번까지, 열은 0번부터 m−1번까지 번호가 붙는다. 행 i, 열 j의 칸을 (i,j)라 하고 높이를 a[i][j]라 한다.
건축가들은 궁전을 지을 직사각형 영역을 골라야 한다. 영역은 격자의 경계인 0번 행, n−1번 행, 0번 열, m−1번 열의 칸을 포함할 수 없다. 네 정수 r1,r2,c1,c2 (1≤r1≤r2≤n−2, 1≤c1≤c2≤m−2)를 골라 r1≤i≤r2이고 c1≤j≤c2인 모든 칸 (i,j)를 영역으로 삼는다.
영역 안의 모든 칸 (i,j)에 대해 다음 조건이 성립하면 그 영역은 올바르다.
- 행 i에서 영역에 인접한 두 칸 (i,c1−1), (i,c2+1)과 열 j에서 영역에 인접한 두 칸 (r1−1,j), (r2+1,j)의 높이가 모두 a[i][j]보다 엄격히 크다.
올바른 영역의 수를 구하여라.
구현 세부 사항
다음 함수를 구현해야 한다.
long long count_rectangles(vector<vector<int>> a)
- a: 각 칸의 높이를 나타내는 n×m 정수 배열
- 올바른 영역의 수를 반환해야 한다.
예제
count_rectangles([[4, 8, 7, 5, 6],
[7, 4, 10, 3, 5],
[9, 7, 20, 14, 2],
[9, 14, 7, 3, 6],
[5, 7, 5, 2, 7],
[4, 5, 13, 5, 6]])

올바른 영역은 다음 여섯 개다.
- r1=r2=c1=c2=1
- r1=1, r2=2, c1=c2=1
- r1=r2=1, c1=c2=3
- r1=r2=4, c1=2, c2=3
- r1=r2=4, c1=c2=3
- r1=3, r2=4, c1=c2=3
예를 들어 r1=1, r2=2, c1=c2=1인 영역에서 a[1][1]=4는 a[0][1]=8, a[3][1]=14, a[1][0]=7, a[1][2]=10보다 작고, a[2][1]=7도 a[0][1]=8, a[3][1]=14, a[2][0]=9, a[2][2]=20보다 작다.
제한
- 1≤n,m≤2500
- 모든 i,j에 대해 0≤a[i][j]≤7000000
부분 문제
- (8점) n,m≤30
- (7점) n,m≤80
- (12점) n,m≤200
- (22점) n,m≤700
- (10점) n≤3
- (13점) 모든 i,j에 대해 0≤a[i][j]≤1
- (28점) 추가 제한이 없다.