个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
目录
- 一、AcWing 797. 差分
- 解题代码
- 二、AcWing 798. 差分矩阵
- 解题代码
一、AcWing 797. 差分
原题链接:点击直接跳转到该题目
关键代码:
b[l] += c;
b[r + 1] -= c;
解题代码
#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;
解题代码
#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;
}