직사각형과 쿼리

값이 10 이하인 N x N 행렬이 주어질 때, 부분행렬 안에 서로 다른 정수가 몇 개 있는지 묻는 질의에 답한다.

보통5누적 합행렬구현완전 탐색면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

NNNN열짜리 정사각 행렬 AA가 주어진다. 이 행렬에 대한 쿼리를 처리하는 프로그램을 작성하시오.

  • x1 y1 x2 y2: 왼쪽 위 칸이 (x1,y1)(x_1, y_1)이고 오른쪽 아래 칸이 (x2,y2)(x_2, y_2)인 부분 행렬에 들어 있는 서로 다른 정수의 개수를 출력한다.

입력

첫째 줄에 NN (1N3001 \le N \le 300)이 주어진다. 다음 NN개 줄에는 행렬의 각 행이 NN개의 수로 주어진다. 행 번호는 위에서 아래로, 열 번호는 왼쪽에서 오른쪽으로 1번부터 매긴다. 행렬의 원소는 10보다 작거나 같은 자연수이다.

다음 줄에 QQ (1Q1000001 \le Q \le 100\,000)가 주어진다. 다음 QQ개 줄에는 쿼리 정보 x1x_1, y1y_1, x2x_2, y2y_2가 주어진다. 여기서 xx는 행 번호, yy는 열 번호이다. (1x1x2N1 \le x_1 \le x_2 \le N, 1y1y2N1 \le y_1 \le y_2 \le N)

출력

각 쿼리마다 답을 한 줄에 하나씩 출력한다.