문제집:
https://www.acmicpc.net/workbook/by/BaaaaaaaaaaarkingDog
백준 문제
https://www.acmicpc.net/problem/11659
문제
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
출력
총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.
제한
- 1 ≤ N ≤ 100,000
- 1 ≤ M ≤ 100,000
- 1 ≤ i ≤ j ≤ N
예제 입력 1
5 3
5 4 3 2 1
1 3
2 4
5 5
예제 출력1
12
9
1
"누적 합"으로 푸는 문제이다. 누적합을 이용하지 않고 단순 합계를 이용한다면 시간초과 오류가 나게 된다.
그래서 매번 구간합을 구하는 것이 아니라,
처음에 n개의 수를 입력받고 나면, 길이 n짜리 리스트를 만들어 리스트의 각 자리에 그 자리까지의 누적합을 저장한 후에 각 자리의 누적합에서 빼주는 방식으로 구간합을 구하면 된다.
import sys
# sys.stdin=open('input.txt', 'r')
if __name__=="__main__":
N,M = map(int, input().split())
nums = list(map(int, input().split()))
storage = [0]
cursum = 0
for i in range(N):
cursum += nums[i]
storage.append(cursum)
for i in range(M):
i,j = map(int, input().split())
answer = storage[j] - storage[i-1]
print(answer)