알고리즘/문제 풀이

11660번: 구간 합 구하기 5

Themion 2022. 1. 6. 17:05

 

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