본문 바로가기
Computer Science

Problem B : const구간의 합 구하기(2D)

by OKOK 2020. 1. 7.

Problem B : const구간의 합 구하기(2D)

 

제한시간: 2000 ms    메모리제한: 512 MB

 

 

N * N크기의 2차원 배열에 수들이 입력되어 있다.

 

이 배열의 임의의 구간에 있는 수들의 합을 

물어보는 M개의 쿼리에 답하는 프로그램을 작성하시오.

 

쿼리에 답하는 중간에 배열의 어떤 원소도 값이 변경되지 않는다.​ 




첫 행에 행과 열의 크기 N이 입력된다. ( 1 <= N <= 1,000) 다음 N개의 행에 걸쳐 N개의 수 Ai가 공백을 구분하여 입력된다. ( -1,000,000 <= Ai <= 1,000,000) 다음 행에 쿼리의 수 M이 입력된다. ( 1 <= M <= 1,000,000) 이어서 M개의 행에 쿼리의 정보 sri, sci, eri, eci가 공백으로 구분되어 입력된다. ( 1<= sri <= eri<= N, 1<= sci <= eci<= N)


각 쿼리에 대한 결과를 행으로 구분하여 출력한다.

 

5

1 2 3 4 5

6 7 8 9 0

-1 2 1 1 1

5 2 3 1 4

1 0 1 0 1

3

2 1 2 1

3 3 5 5

1 1 5 5

 

6

13

67

 

#include <stdio.h>

#define MAX 6 // 1010
int N, M;
long long A[MAX][MAX];

int main()
{
	freopen("input.txt", "r", stdin);
	scanf("%d", &N);
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			scanf("%lld", &A[i][j]);
			A[i][j] += A[i][j - 1] + A[i - 1][j] - A[i - 1][j - 1]; // 누적합을 계산함 N^2 입력과 동시
		}
	}
	scanf("%d", &M);
	int sy, sx, ey, ex;
	while (M--) {
		scanf("%d %d %d %d", &sy, &sx, &ey, &ex);
		sy--, sx--;
		printf("%lld\n", A[ey][ex] + A[sy][sx] - A[sy][ex] - A[ey][sx]); // 2D 누적합 이렇게 계산
	}
	return 0;
}

'Computer Science' 카테고리의 다른 글

Problem D : 키로거(Keylogger)  (0) 2020.01.08
Problem C : 용액  (0) 2020.01.08
Problem A : 수열  (0) 2020.01.07
큐브  (0) 2020.01.07
루빅의 사각형  (0) 2020.01.07

댓글