当前位置: 首页 > news >正文

[题] 差分矩阵 #差分

题目

差分矩阵


题解

只有一个操作:


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;
}

利用差分的思想,扩展到二维上。
insert函数作用是将矩阵之内的数全部加上c, 其余部分不会变。
而最后的实现其实就是前面子矩阵的和这道题的方法,也就是将最后得到的b数组进行二维前缀和的操作,
得到的b数组就是答案

举例理解:

	首先 假设 有一个4X4 的小方块要加上 2, 那么我们先将方块的左上角(1, 1)加上2。然后你想,我们最后是要进行二维前缀和的运算的,那么为了不让其它部分受到影响,我们要将(1, 5)(5, 1)上的数减去2,抵消从(1, 1)传递过来的2的影响,这样后面的数也不会受到影响了。注意!有一个位置,就是b(5, 5)它减去了两次2!因为它同时受b(5, 1)b(1, 5)的影响,所以我们还要在b(5, 5)再加上2.

代码

答案

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;int n, m, q;
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(){scanf("%d%d%d", &n, &m, &q);for(int i = 1; i <= n; i ++)for(int j = 1;j <= m; j ++){scanf("%d", &a[i][j]);insert(i, j, i, j, a[i][j]);}for(int i = 1; i <= q; i ++){int x1, x2, y1, y2, c;scanf("%d%d%d%d%d", &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]);puts("");}    return 0;
}
http://www.lryc.cn/news/195099.html

相关文章:

  • Studio One6.5最新版本新增了对Linux的支持
  • 大模型引发“暴力计算”,巨头加速推进液冷“降温”
  • git log 美化配置
  • Spark 的主要组件及任务分工
  • Apache Spark 中的 RDD是什么
  • idea自动封装方法
  • js正则表达式
  • 服务安全-应用协议rsync未授权ssh漏洞复现
  • [环境搭建]OpenHarmony开发环境搭建
  • [牛客习题]“幸运的袋子”
  • 安科瑞预付费系统在某大型连锁农贸市场的设计应用
  • Spring Boot Bean 注入的常用方式教程
  • Java项目调用Python脚本(基于idea)
  • 前端 JS 经典:i,i++,++i区别
  • EF Core 7.0 新特性之批量修改
  • Vue_Bug error0308010Cdigital envelope routinesunsupported
  • 中科院提出“思维传播”,极大增强ChatGPT等模型复杂推理能力
  • ubuntu20.04安装opencv 3.2.0 报错
  • KubeVela交付
  • 【SpringCloud-10】SCA-nacos
  • 卡顿分析与布局优化
  • 【Vivado HLS Bug】Ubuntu环境下Vivado HLS导出IP报错:HLS ERROR: [IMPL 213-28]
  • 2022最新版-李宏毅机器学习深度学习课程-P14 批次(batch)与动量(momentum)
  • 谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)rust解法
  • acwing算法基础之数据结构--双链表
  • 将中文名格式化输出为英文名
  • 设计模式_迭代器模式
  • 【数据结构】:栈的实现
  • 微前端一:技术选型
  • FPGA project : flash_continue_write