닭강정의 전설

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

요약
N x N 격자가 주어질 때, 부분 행렬의 내부 칸은 더하고 테두리 칸은 빼는 값을 Q개의 질의마다 계산한다.
난이도

보통10점 중 6점

유형
누적 합, 배열, 구현, 수학
정답자
아직 제출이 없습니다

문제

진주 가까이에 있는 창원에 사는 아림이는 보선이가 진주 나들이를 온 사실을 알고 오랜만에 만나서 맥주나 마시자고 보선이에게 연락했다. 보선이도 반가운 마음에 알겠다고 즉답했지만, 뒤늦게 한 가지 사실을 떠올렸다. 그 사실은 바로 아림이는 맥주를 아무리 마셔도 취하지 않는 '맥주 한정 주당'이라는 것이었다. '소주 한정 주당' 보선이는 아림이와 맥주를 마시면 술에 진탕 취할 것이 뻔하다는 생각이 들었고, 경상국립대에 대대로 내려오는 닭강정의 전설을 믿어보기로 하였다.

닭강정의 전설은 '경상국립대 후문에서 파는 특별한 닭강정이 있는데, 그 닭강정은 취기를 막아주는 정도가 있다.'라는 전설이다. 이 전설을 믿고 보선이는 경상국립대 후문 쪽에 있는 특별한 닭강정을 파는 가게에 갔는데, 그 가게의 판매 시스템은 보통 닭강정 가게와 다르게 특이했다. 특이한 판매 시스템은 다음과 같다.

  • N×NN × N 크기의 격자가 있고, 칸마다 1g의 닭 순살이 있다.
  • ii번째 줄의 jj번째 칸의 순살은 상수 k_i,jk\_{i,j}를 지닌다.
  • 구매자는 두 점 (r_1,c_1)(r\_1, c\_1), (r_2,c_2)(r\_2, c\_2)를 고를 수 있다. 두 점을 고르면 r_1≤r≤r_2r\_1 ≤ r ≤ r\_2와 c_1≤c≤c_2c\_1 ≤ c ≤ c\_2를 동시에 만족하는 모든 (r,c)(r, c) 칸의 순살들을 뭉쳐서 튀긴다.
  • 이때, 튀겨진 닭강정의, 취기를 막아주는 정도는 다음과 같이 계산된다.∑_i=r_1r_2∑_j=c_1c_2\pmatrixk_i,j×{1if r_1<i<r_2 and c_1<j<c_2 −1otherwise\sum\_{i={r\_1}}^{r\_2} \sum\_{j={c\_1}}^{c\_2} \pmatrix{k\_{i,j} \times \begin{cases} 1 & \text{if } r\_1 < i < r\_2 \text{ and } c\_1 < j < c\_2 \\\ -1 & \text{otherwise} \end{cases}}

이러한 판매 시스템이 복잡하다 보니, 이 가게에는 구매자가 (r_1,c_1)(r\_1, c\_1), (r_2,c_2)(r\_2, c\_2)를 고르면 고른 두 점에 따라 튀겨지는 닭강정의, 취기를 막아주는 정도를 자동으로 계산하는 기계가 있다. 그런데 이 기계가 하필 보선이가 방문한 날에 고장이 나버렸다! 그래서 보선이는 옆에 있던 우리한테 (r_1,c_1)(r\_1, c\_1), (r_2,c_2)(r\_2, c\_2)를 고를 때마다 고른 두 점에 따라 튀겨지는 닭강정의, 취기를 막아주는 정도를 계산해 달라고 부탁했다.

자, 이제 보선이의 부탁을 들어주자.

입력

첫 번째 줄에는 격자의 크기 NN이 주어진다. (5≤N≤5,000)(5 ≤ N ≤ 5\\,000)

두 번째 줄부터 NN개의 줄에 걸쳐 ii번째 줄의 jj번째 칸에 해당하는 순살의 상수 k_i,jk\_{i,j}가 NN개씩 공백으로 구분되어 주어진다. (1≤k_i,j≤10)(1 ≤ k\_{i,j} ≤ 10)

2+N2+N번째 줄에는 두 점 (r_1,c_1)(r\_1, c\_1), (r_2,c_2)(r\_2, c\_2)를 고르는 횟수 QQ가 주어진다. (1≤Q≤100,000)(1 ≤ Q ≤ 100\\,000)

3+N3+N번째 줄부터 QQ개의 줄에 걸쳐 r_1r\_1, c_1c\_1, r_2r\_2, c_2c\_2가 공백으로 구분되어 주어진다. (1≤r_1,c_1,r_2,c_2≤N;r_1+2≤r_2;c_1+2≤c_2)(1 ≤ r\_1, c\_1, r\_2, c\_2 ≤ N; r\_1 + 2 ≤ r\_2; c\_1 + 2 ≤ c\_2)

입력으로 주어지는 모든 수는 정수이다.

출력

QQ개의 줄에 걸쳐 주어지는 r_1r\_1, c_1c\_1, r_2r\_2, c_2c\_2에 따라 튀겨지는 닭강정의, 취기를 막아주는 정도를 한 줄에 하나씩 출력한다.

힌트

Python 3 사용자는 PyPy3로 제출할 것을 권장한다.

예제1

  1. 예제 1

    입력
    5
    1 1 1 1 1
    1 2 2 2 1
    1 2 3 2 1
    1 2 2 2 1
    1 1 1 1 1
    2
    1 1 5 5
    2 2 4 4
    
    예상 출력
    3
    -13