첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.
출력
총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.
제한
1 ≤ N ≤ 100,000
1 ≤ M ≤ 100,000
1 ≤ i ≤ j ≤ N
풀이
수의 개수가 크기 때문에 구간 합을 미리 구해두고 구간합을 구했다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
importsysN,M=map(int,sys.stdin.readline().split())S=[int(i)foriinsys.stdin.readline().split()]D=[0]*N# List for subtotalD[0]=S[0]foriinrange(1,N):D[i]=D[i-1]+S[i]# compute ith index's subtotalfor_inrange(M):start,end=map(int,sys.stdin.readline().split())ifstart>1:# getting value in rangeans=D[end-1]-D[start-2]else:ans=D[end-1]print(ans)