개념
배열 앞에서부터 더한 값을 미리 저장해 여러 구간의 합을 빠르게 구하는 방법입니다.
구간 합 계산
를 처음 개 원소의 합으로 정의하면 , 입니다. 번째부터 번째까지의 합은 입니다.
의 누적 합은 입니다. 두 번째부터 네 번째 원소의 합은 입니다.
구간 앞쪽에 포함된 공통 부분을 빼는 방식입니다. 값이 바뀌면 뒤쪽의 누적 합도 바뀌므로 주로 배열이 고정된 상태에서 많은 질의를 처리할 때 사용합니다.
식에서 빼는 부분을 펼치면 이고, 입니다. 두 식을 빼면 구간 앞쪽의 합이 상쇄되고 만 남습니다. 일 때도 앞쪽에 원소가 없는 합을 으로 두면 같은 식을 사용할 수 있습니다.
길이 인 배열에서 구간 합을 번 묻는다면 매번 더하는 방법은 최대 개의 원소를 확인합니다. 누적 합은 처음에 배열을 한 번 더한 뒤 각 질문에서 두 누적 합만 확인합니다. 구간의 길이와 위치가 서로 달라도 같은 표를 재사용할 수 있습니다.
복잡도
원소 수를 , 질의 수를 라고 합니다.
| 연산 | 시간복잡도 | 공간복잡도 |
|---|---|---|
| 누적합 전처리 | 누적합 | |
| 구간 합 질의 | 추가 | |
| 전처리와 전체 질의 | 누적합 |
예제
문제
주어진 배열에서 여러 구간의 합을 구하여라.
입력
첫째 줄에 원소 수 과 질의 수 가 공백을 사이에 두고 주어진다. 이다.
둘째 줄에 수열의 원소 이 공백을 사이에 두고 주어진다. 이다.
다음 개 줄에 구간의 양 끝 번호 이 공백을 사이에 두고 주어진다. 이다. 두 끝의 원소를 모두 포함한다.
출력
각 구간의 합을 한 줄에 출력한다.