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
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 12813번 이진수 연산 (C++) (0) | 2022.03.07 |
---|---|
[BOJ] 10974번 모든 순열 (C++) (0) | 2022.03.06 |
[BOJ] 17298번 오큰수 (C++) (0) | 2022.03.05 |
[BOJ] 20126번 교수님의 기말고사 (C++) (0) | 2022.03.04 |
[BOJ] 24523번 내 뒤에 나와 다른 수 (C++) (0) | 2022.03.03 |