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

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

딱 알맞게 초록색

시간 제한1초메모리 제한512 MB

요약
N×N 격자에서 최솟값이 정확히 100인 모든 직사각형 부분 격자의 개수를 센다.
난이도

보통10점 중 7점

유형
누적 합, 분할 정복, 스택, 행렬
정답자
아직 제출이 없습니다

문제

Farmer John의 목초지는 N×NN \times N 격자(1≤N≤5001 \leq N \leq 500)로 나타낼 수 있으며, 각 칸에는 잔디가 자라고 있다(거대한 체스판을 떠올리면 된다). 토양의 차이 때문에 어떤 칸의 잔디는 다른 칸보다 더 초록색이다. 각 칸 (i,j)(i,j)는 1…2001 \ldots 200 범위의 정수인 초록 정도 G(i,j)G(i,j)로 나타낸다.

Farmer John은 목초지의 직사각형 부분 격자를 사진으로 찍으려고 한다. 부분 격자가 충분히 초록색으로 보이되 지나치게 초록색이지는 않아야 하므로, GG의 최솟값이 정확히 100인 부분 격자를 찍기로 한다. 그가 찍을 수 있는 서로 다른 사진의 수를 구하자. 부분 격자는 목초지 전체만큼 클 수도 있고 한 칸만큼 작을 수도 있다(전체 부분 격자의 수는 N2(N+1)2/4N^2(N+1)^2/4개이다. 이 수는 표준 32비트 정수에 담기에는 너무 클 수 있으므로 C++의 "long long"과 같은 64비트 정수 자료형이 필요할 수 있다).

입력

첫째 줄에 NN이 주어진다. 다음 NN개의 줄에는 각각 NN개의 정수가 주어지며, N×NN \times N 목초지의 G(i,j)G(i,j) 값을 나타낸다.

출력

Farmer John이 찍을 수 있는 서로 다른 사진의 수, 즉 초록 정도의 최솟값이 정확히 100인 직사각형 부분 격자의 수를 출력한다.

이 문제에서 다루는 정수의 크기가 크므로 C/C++의 "long long"과 같은 64비트 정수 자료형이 필요할 수 있다.

예제1

  1. 예제 1

    입력
    3
    57 120 87
    200 100 150
    2 141 135
    
    예상 출력
    8