#include <iostream>
#include <vector>
 
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(NULL);
 
    int N = 0;
    int M = 0;
    std::cin >> N >> M;
    std::vector<int> DP(N + 1);
 
    DP[0] = 0;
 
    for (int i = 1; i <= N; ++i)
    {
        int iNumber = 0;
        std::cin >> iNumber;
 
        DP[i] = DP[i - 1] + iNumber;
    }
 
    for (int i = 0; i < M; ++i)
    {
        int iFirst = 0;
        int iSecond = 0;
        std::cin >> iFirst >> iSecond;
 
        std::cout << DP[iSecond] - DP[iFirst - 1] << "\n";
    }
 
    return 0;
}

정말 아무생각 없이 더했습니다.

바로 시간초과가 나오더라구요...ㅋㅋㅋㅋ

누적 합은 DP를 통해서 풀면 됩니다.

처음부터 계속해서 더하고(DP[N])

원하는 위치까지 더한 것(DP[iSecond])에서 필요 없는 부분(DP[iFirst -1])(-1은 본인 것은 있어야하기 때문)까지 더한 것을 빼기만 하면 됩니다.

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 14500 테트로미노  (0) 2022.09.24
[C++] 백준 11727 2xn 타일링 2  (2) 2022.09.23
[C++] 백준 11403 경로 찾기  (0) 2022.09.21
[C++] 백준 11286 절댓값 힙  (0) 2022.09.20
[C++] 백준 11047 동전 0  (0) 2022.09.19

+ Recent posts