https://www.acmicpc.net/problem/11660
11660번: 구간 합 구하기 5
첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네
www.acmicpc.net
각 구간의 합을 sum에 저장한 뒤, 각 테스트 케이스에서 구간에 맞는 합을 출력한다.
#include <iostream>
using namespace std;
#define MAX_N 1024
int main() {
// 입출력 속도 향상
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// N: 표의 행과 열의 수, M: 쿼리의 개수
// sum[i][j]: 1행 1열부터 i행 j열까지 모두 더한 값
// i, j: 인덱스
int N, M, sum[MAX_N + 1][MAX_N + 1] = {{ 0, }}, x1, y1, x2, y2;
// 수의 개수와 쿼리의 개수를 입력받은 뒤 각 수를 입력받아 합을 sum에 저장
cin >> N >> M;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++) {
cin >> x1;
sum[i][j] += sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] + x1;
}
// 각 쿼리마다
while (M--) {
// 합을 구할 구간을 입력받은 뒤 구간에 맞는 합을 출력
cin >> x1 >> y1 >> x2 >> y2;
cout << sum[x2][y2] - sum[--x1][y2] - sum[x2][--y1] + sum[x1][y1] << '\n';
}
return 0;
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
11719번: 그대로 출력하기 2 (0) | 2022.01.06 |
---|---|
11718번: 그대로 출력하기 (0) | 2022.01.06 |
11659번: 구간 합 구하기 4 (0) | 2022.01.06 |
11654번: 아스키 코드 (0) | 2022.01.06 |
11653번: 소인수분해 (0) | 2022.01.06 |