누적합
빠른 설명
누적합은 앞에서부터 합을 미리 저장해 두고, 구간 합을 빠르게 구하는 기법이다.
언제 쓰는가
- 구간 합 질의가 여러 번 나올 때
- 배열을 매번 다시 더하면 시간 초과가 날 때
- 2차원 격자에서 직사각형 합을 구할 때
시간복잡도
- 전처리:
- 구간 합 질의:
참고자료
C++ 코드
#include <algorithm>
#include <deque>
#include <functional>
#include <iostream>
#include <queue>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
int main() {
vector<int> a = {2, 4, 1, 3, 5};
int n = a.size();
vector<int> prefix(n + 1, 0);
for (int i = 0; i < n; i++) {
prefix[i + 1] = prefix[i] + a[i];
}
int l = 1, r = 3; // a[1]부터 a[3]까지
cout << prefix[r + 1] - prefix[l] << '\n';
}Python 코드
a = [2, 4, 1, 3, 5]
prefix = [0]
for x in a:
prefix.append(prefix[-1] + x)
l, r = 1, 3
print(prefix[r + 1] - prefix[l])