구간합구하기(백준 11659번)


link : https://www.acmicpc.net/problem/11659

누적합 문제이다.
원소에 직접 접근해서 합을 구하는것은 시간이 오래 걸린다.

그래서 구간별로 합을 구해서 배열로 만들어 줘야 한다.
구간의 값을 x랑 y로 받고 y구간 까지의 합과 x-1번째 까지의 합의 배열을 빼주면 구간의 합을 구할 수 있다.

#include <iostream>
using namespace std;

int arr[100001] = { 0, };

int main() {

	ios_base::sync_with_stdio(NULL);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, m;
	cin >> n >> m;

	for (int i = 1; i <= n; i++) {
		int num;
		cin >> num;
		if (i == 1) {
			arr[i] = num;
		}
		else {
			arr[i] = (num + arr[i - 1]);
		}
	}

	while (m--) {
		int x, y;
		cin >> x >> y;
		cout << arr[y] - arr[x - 1] << "\n";
	}

}

좋은 웹페이지 즐겨찾기