【算法| 差分 No.1】AcWing 797. 差分 & AcWing 798. 差分矩阵

个人主页:兜里有颗棉花糖

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创

收录于专栏【手撕算法系列专栏

🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助

🍓希望我们一起努力、成长,共同进步。

目录

  • [一、AcWing 797. 差分](#一、AcWing 797. 差分)
  • [二、AcWing 798. 差分矩阵](#二、AcWing 798. 差分矩阵)

一、AcWing 797. 差分

原题链接:点击直接跳转到该题目

关键代码:

  • b[l] += c;
  • b[r + 1] -= c;

解题代码

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;
int nums[N];
int b[N];

void insert(int l,int r,int c)
{
    b[l] += c;
    b[r + 1] -= c;
}
int main()
{
    int n,m;
    cin >> n >> m;
    for(int i = 1;i <= n;i++) cin >> nums[i];
    while(m--)
    {
        int l,r,c;
        cin >> l >> r >> c;
        insert(l,r,c);
    }
    for(int i = 2;i <= n;i++) b[i] = b[i] + b[i - 1];
    for(int i = 1;i <= n;i++) nums[i] = nums[i] + b[i];
    for(int i = 1;i <= n;i++) printf("%d ",nums[i]);
    return 0;
}

二、AcWing 798. 差分矩阵

原题链接:点击直接跳转到该题目

代码关键:

  • b[x1][y1] += c;
  • b[x2 + 1][y1] -= c;
  • b[x1][y2 + 1] -= c;
  • b[x2 + 1][y2 + 1] += c;

解题代码

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int N = 1010;
int nums[N][N];
int b[N][N];

void insert(int x1,int y1,int x2,int y2,int c)
{
    b[x1][y1] += c;
    b[x1][y2 + 1] -= c;
    b[x2 + 1][y1] -= 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 >> nums[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][j] - b[i - 1][j - 1];
            nums[i][j] += b[i][j];
        }
    
    // 打印最终数组
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= m;j++)
        {
            printf("%d ",nums[i][j]);
        }
        printf("\n");
    }
    return 0;
}
相关推荐
二进制person2 小时前
Java SE--方法的使用
java·开发语言·算法
OneQ6663 小时前
C++讲解---创建日期类
开发语言·c++·算法
JoJo_Way3 小时前
LeetCode三数之和-js题解
javascript·算法·leetcode
.30-06Springfield3 小时前
人工智能概念之七:集成学习思想(Bagging、Boosting、Stacking)
人工智能·算法·机器学习·集成学习
凌肖战5 小时前
力扣网C语言编程题:在数组中查找目标值位置之二分查找法
c语言·算法·leetcode
weixin_478689765 小时前
十大排序算法汇总
java·算法·排序算法
luofeiju6 小时前
使用LU分解求解线性方程组
线性代数·算法
SKYDROID云卓小助手6 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理
ysa0510307 小时前
数论基础知识和模板
数据结构·c++·笔记·算法
GEEK零零七7 小时前
Leetcode 1103. 分糖果 II
数学·算法·leetcode·等差数列