#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 |