题解 | 【模板】二维前缀和

【模板】二维前缀和

https://www.nowcoder.com/practice/99eb8040d116414ea3296467ce81cbbc

import sys
import sys

input = sys.stdin.read
data = input().split()
idx = 0


n = int(data[idx])
m = int(data[idx + 1])
q = int(data[idx + 2])
idx += 3

arr = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
    for j in range(1, m + 1):
        arr[i][j] = int(data[idx])
        idx += 1

pre = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
    row_sum = 0
    for j in range(1, m + 1):
        # 前缀和:pre[i][j] = 上 + 左 - 左上 + 当前元素
        pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] + arr[i][j]

res = []
for _ in range(q):
    x1 = int(data[idx])
    y1 = int(data[idx + 1])
    x2 = int(data[idx + 2])
    y2 = int(data[idx + 3])
    idx += 4

    ans = pre[x2][y2] - pre[x1 - 1][y2] - pre[x2][y1 - 1] + pre[x1 - 1][y1 - 1]
    res.append(str(ans))


print("\n".join(res))

全部评论

相关推荐

02-25 13:02
中南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务