▼感想:
累積和の計算方法のやりかたを踏まえて、本問を解くことができました。
▼コード:
########## 処理0(準備) インプット,リスト定義など ###########
H,W,N = map(int,input().split())
A = [[0 for i in range(W)] for j in range(H)]
# ruisekiwa_yoko,ruisekiwa_tate: 横方向,縦方向の累積和格納用リスト
ruisekiwa_yoko = [[0 for i in range(W)] for j in range(H)]
ruisekiwa_tate = [[0 for i in range(W)] for j in range(H)]
########## 処理1 横方向の累積和の計算、格納 ##########
for j in range(H):
A[j] = list(map(int,input().split()))
ruisekiwa_yoko[j][0] = A[j][0]
for i in range(W-1):
ruisekiwa_yoko[j][i+1] = ruisekiwa_yoko[j][i] + A[j][i+1]
########## 処理2 縦方向の累積和の計算、格納 ##########
for i in range(W):
ruisekiwa_tate[0][i] = A[0][i]
for j in range(H-1):
ruisekiwa_tate[j+1][i] = ruisekiwa_tate[j][i] + A[j+1][i]
########## 処理3 入力に応じた累積和の計算 ##########
for _ in range(N):
# total: 計算した累積和の格納用変数
total = 0
y,x = map(int,input().split())
# 入力が横長
if y < x:
for j in range(y):
total += ruisekiwa_yoko[j][x-1]
# 入力が縦長、または横と縦が同じ長さ
else:
for i in range(x):
total += ruisekiwa_tate[y-1][i]
print(total)