import sys
input = sys.stdin.readline
n, m = map(int, input().split()) # 수의 개수 n, 합을 구해야 하는 횟수 m
numbers = list(map(int, input().split())) # n개의 수
# dp 리스트 만들기
dp = [0 for _ in range(n+1)]
for i in range(n):
dp[i+1] = dp[i] + numbers[i]
for _ in range(m):
i, j = map(int, input().split())
print(dp[j] - dp[i-1])
풀이
- 먼저
dp[i+1]
에numbers[i]
까지(numbers[:i+1]
)의 합을 저장하여 dp리스트를 만든다. i
와j
가 주어졌을 때,i
는 구간의 시작j
는 구간의 끝이니dp[j] - dp[i-1]
을 하면 해당 구간의 합을 구할 수 있다.
Python과 그냥 PyPy를 써도 시간초과가 나서 import sys
를 해야 겨우 시간초과의 늪에서 빠져나올 수 있는 문제였다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python] 11053. 가장 긴 증가하는 부분 수열 (0) | 2021.09.26 |
---|---|
[Python] 2579. 계단오르기 (0) | 2021.09.23 |
[Python] 1904. 01타일 (0) | 2021.09.19 |
[Python] 9095. 1, 2, 3 더하기 (0) | 2021.09.19 |
[Python] 2103. 이친수 (0) | 2021.09.19 |