Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(11659) 구간 합 구하기 4 본문

백준 (C++)/Solve

(11659) 구간 합 구하기 4

dh-winternagi 2026. 4. 17. 23:00

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

단계별로 풀어보기

22단계(누적 합) 1번째

 

 

 

단독으로 쓰이기보단 다른 문제에서 필요한 테크닉으로 주로 쓰이는 누적 합 개념이다.

s[k]를 수열의 1번째부터 k번째 원소까지 더한 누적합이라고 하자. s[0]=0이다.

이때 수열의 i번째 원소부터 j번째 원소까지의 합은 반복문으로 구하면 O(N)이 걸리지만,

누적합을 이용하면 s[j]-s[i-1]로 O(1)만에 바로 구할 수 있다.

누적합에서 s[0]을 (개념적으로 공집합 원소의 합인) 0으로 두는 이유가 이것이다. s[0]=0이라면 i=1일 때에도 계산이 쉽기 때문이다.

 

 

 

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

int main() 
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  
  int n, m;
  
  cin >> n >> m;
  
  vector<int> s(n+1);
  
  for(int k=1;k<=n;k++){
    cin >> s[k];
    s[k]+= s[k-1];
  }
  
  while(m--){
    int i, j;
    
    cin >> i >> j;
    
    cout << s[j]-s[i-1] << "\n";
  }
  
  return 0;
}

'백준 (C++) > Solve' 카테고리의 다른 글

(16139) 인간-컴퓨터 상호작용  (0) 2026.04.18
(2559) 수열  (0) 2026.04.18
(12865) 평범한 배낭  (0) 2026.04.17
(9251) LCS  (0) 2026.04.17
(2565) 전깃줄  (0) 2026.04.17