코딩테스트 준비

누적 합 알고리즘! - itertools의 accumulate()

언어 수집가 2021. 2. 25. 23:48
import sys
from itertools import accumulate
n, m = map(int, sys.stdin.readline().split())
arr = []
for i in range(n):
arr.append(list(map(int, sys.stdin.readline().split())))
arr[i] = list(accumulate(arr[i]))
num = int(sys.stdin.readline())
for k in range(num):
res = 0
i, j, x, y = map(int, sys.stdin.readline().split())
for l in range(i-1, x):
if j == 1:
res += arr[l][y-1]
else:
res += arr[l][y-1] - arr[l][j-2]
print(res)
import sys
n, m = map(int, sys.stdin.readline().split())
arr = []
cum = [[0]*(m+1) for _ in range(n)]
for i in range(n):
arr.append(list(map(int, sys.stdin.readline().split())))
cum[i][1] = arr[i][0]
for j in range(2, len(arr[i])+1):
cum[i][j] = arr[i][j-1] + cum[i][j-1]
num = int(sys.stdin.readline())
for k in range(num):
res = 0
i, j, x, y = map(int, sys.stdin.readline().split())
for l in range(i-1, x):
res += cum[l][y] - cum[l][j-1]
print(res)