본문 바로가기

Algorithm/BAEKJOON

[BOJ] 11659번 구간 합 구하기 4 (C++)

728x90
반응형

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

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	
	int n, m, num, x, y;
	cin >> n >> m;
	vector<int> v(n + 1);
	for(int i = 1; i <= n; i++){
		cin >> num;
		v[i] = v[i - 1] + num;
	}
	for(int i = 0; i < m; i++){
		cin >> x >> y;
		cout << v[y] - v[x - 1] << '\n';
	}
	return 0;
}

누적합을 미리 구해놓고 구간이 주어지면 이 누적합을 통해서 구한다. 

 

벡터 v에는 주어진 배열의 첫 번째 원소부터 현재 원소까지의 합을 저장한다.

x번부터 y번 index까지의 값을 구하라고 한다면 v[y] - v[x - 1]을 통해서 구할 수 있다.

728x90
반응형