Acwing798.差分矩阵

前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)_前缀和差分_林小鹿@的博客-CSDN博客

代码展示:

cpp 复制代码
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e3 + 10;
int a[N][N], b[N][N];
void insert(int x1, int y1, int x2, int y2, int c)
{
    b[x1][y1] += c;
    b[x2 + 1][y1] -= c;
    b[x1][y2 + 1] -= c;
    b[x2 + 1][y2 + 1] += c;
}
int main()
{
    int n, m, q;
    cin >> n >> m >> q;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> a[i][j];
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            insert(i, j, i, j, a[i][j]);      //构建差分数组
        }
    }
    while (q--)
    {
        int x1, y1, x2, y2, c;
        cin >> x1 >> y1 >> x2 >> y2 >> c;
        insert(x1, y1, x2, y2, c);
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];  //二维前缀和
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            printf("%d ", b[i][j]);
        }
        printf("\n");
    }
    return 0;
}
相关推荐
无聊的小坏坏5 分钟前
【C++】set、map 容器的使用
c++·stl
※※冰馨※※8 分钟前
彻底解决QT5 中文编译不过问题
c++·windows·qt
z人间防沉迷k13 分钟前
贪心、分治和回溯算法
算法
小刘不想改BUG24 分钟前
LeetCode LCR 010 和为 K 的子数组 (Java)
java·算法·leetcode
扶尔魔ocy31 分钟前
QT使用QXlsx读取excel表格中的图片
c++·excel
朱剑君40 分钟前
第七天——贪心算法——股票买卖问题
算法·贪心算法
Ronin30542 分钟前
【C++】18.二叉搜索树
开发语言·数据结构·c++
Susea&43 分钟前
初始C++:类和对象(中)
c语言·开发语言·c++
ai.Neo43 分钟前
牛客网NC276110题解:小红的数组重排
数据结构·算法·排序算法
大锦终1 小时前
【C++】unordered_map与set的模拟实现
开发语言·数据结构·c++·哈希算法