题解 | 【模板】二维差分

【模板】二维差分

https://www.nowcoder.com/practice/50e1a93989df42efb0b1dec386fb4ccc

"""
 总结: 
 https://mp.csdn.net/mp_blog/creation/success/149482114
 
"""
n ,m , q =map(int ,input().split())
maxtrix = [list(map(int, input().split())) for _ in range(n)]

d = [[0 for _ in range(m + 2)] for _ in range(n + 2)]
# 初始化差分数组
for i in range(1, n + 1):
    for j in range(1, m + 1):
        d[i][j] = maxtrix[i - 1][j - 1]
        if i > 1:
            d[i][j] -= maxtrix[i - 2][j - 1]
        if j > 1:
            d[i][j] -= maxtrix[i - 1][j - 2]
        if i > 1 and j > 1:
            d[i][j] += maxtrix[i - 2][j - 2]
# 处置修改
for _ in range(q):
    x1, y1, x2, y2, k = map(int, input().split())
    # 调整差分
    d[x1][y1] += k
    d[x2 + 1][y1] -= k
    d[x1][y2 + 1] -= k
    d[x2 + 1][y2 + 1] += k

# 根据差分还原数组
for i in range(1, n + 1):
    for j in range(1, m + 1):
        maxtrix[i - 1][j - 1] = d[i][j]
        if i > 1:
            maxtrix[i - 1][j - 1] += maxtrix[i - 2][j - 1]
        if j > 1:
            maxtrix[i - 1][j - 1] += maxtrix[i - 1][j - 2]
        if i > 1 and j > 1:
            maxtrix[i - 1][j - 1] -= maxtrix[i - 2][j - 2]

for row in maxtrix:
    print(" ".join(map(str, row)))

全部评论

相关推荐

09-23 15:37
门头沟学院 Java
面了100年面试不知...:ai面:请你说一下在无的论文/项目中,你具体做了什么
我的秋招日记
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-08 18:20
职场水母:这题思路是什么,我目前想的一个暴力方法就是先把这个链表遍历一遍,用哈希表存储出现次数,然后再根据哈希表来一个一个删除节点,
点赞 评论 收藏
分享
09-22 22:22
中山大学 Java
双尔:赌对了,不用经历秋招的炼狱真的太好了,羡慕了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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