差分个人见解(二)

差分个人见解(二)

  • 二维差分
    • 二维差分数组的用途
    • 构造二维差分数组
    • 实战演练

如果你还不太熟悉一维差分,那么请先学会一维差分。

二维差分

二维差分数组的用途

在一维差分数组中,它的用途是 快速 使一个区间内加上一个数。

那么二维差分数组的用途就是 快速使一个子矩阵内加上一个数。
在这里插入图片描述
假设红色的点构成了一个二维数组,现在我们的任务是 将蓝色区域内的元素都加上 c。

在这里插入图片描述
首先让绿色的点 加上 c。
在这里插入图片描述
此时最终在求前缀和数组的时候,绿色区域内的元素都会加上 c。
在这里插入图片描述
接下来关注 紫色点,由于刚才多加了一部分区域,所以我们需要给 紫色点 减去 c。

那么紫色区域内的值都会 减去 c。

在这里插入图片描述
接着 黄色点 也减去 c,此时黄色区域内的值在 后面计算前缀和的时候就会 都减去 c。

此时有一部分减多了。
在这里插入图片描述
所以这个黑色点再加上 c。

转换成代码如下:(其中 (x1, y1)为子矩阵的左上角的点,(x2, y2) 为子矩阵右下角的点,其中数组b为差分数组)

在这里插入图片描述

构造二维差分数组

构造差分数组有两种方法,第一种是利用下列递推公式。
在这里插入图片描述

假设下面为我们的差分数组,假设我们要 求下面黑色点的差分。
在这里插入图片描述

那么只需要黑色点的前缀和 减去 绿色点的前缀和 减去 蓝色点的前缀和 再加上紫色点的前缀和。 而这些点的前缀和 就是 该坐标 在数组 a (原数组)上对应的值,因为数组a是下面数组的前缀和数组。

在这里插入图片描述

第二种就是利用刚才的 addToRange 函数,当子矩阵为一个点的情况。

实战演练

输入一个 n n n m m m 列的整数矩阵,再输入 q q q 个操作,每个操作包含五个整数 x 1 , y 1 , x 2 , y 2 , c x_1, y_1, x_2, y_2, c x1,y1,x2,y2,c,其中 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。

每个操作都要将选中的子矩阵中的每个元素的值加上 c c c

请你将进行完所有操作后的矩阵输出。

输入格式

第一行包含整数 n , m , q n,m,q n,m,q

接下来 n n n 行,每行包含 m m m 个整数,表示整数矩阵。

接下来 q q q 行,每行包含 5 5 5 个整数 x 1 , y 1 , x 2 , y 2 , c x_1, y_1, x_2, y_2, c x1,y1,x2,y2,c,表示一个操作。

输出格式

n n n 行,每行 m m m 个整数,表示所有操作进行完毕后的最终矩阵。

数据范围

1 ≤ n , m ≤ 1000 1 \le n,m \le 1000 1n,m1000,
1 ≤ q ≤ 100000 1 \le q \le 100000 1q100000,
1 ≤ x 1 ≤ x 2 ≤ n 1 \le x_1 \le x_2 \le n 1x1x2n,
1 ≤ y 1 ≤ y 2 ≤ m 1 \le y_1 \le y_2 \le m 1y1y2m,
− 1000 ≤ c ≤ 1000 -1000 \le c \le 1000 1000c1000,
− 1000 ≤ 矩阵内元素的值 ≤ 1000 -1000 \le 矩阵内元素的值 \le 1000 1000矩阵内元素的值1000

输入样例:

3 4 3
1 2 2 1
3 2 2 1
1 1 1 1
1 1 2 2 1
1 3 2 3 2
3 1 3 4 1

输出样例:

2 3 4 1
4 3 4 1
2 2 2 2

准备阶段:
在这里插入图片描述

输入环节:(注意:前缀和和差分 中 都需要记得 从1开始存储,这样就不需要分类讨论了,会方便很多)

在这里插入图片描述
接下来我们需要构造差分数组。

下面为两种构造方法的演示:

当然你得提前 把子矩阵 加上一个数的 函数 先写了。
在这里插入图片描述

第一种方法:
在这里插入图片描述
第二种方法:
在这里插入图片描述
构造完了差分数组,接下来我们来处理 q 次询问。

对于每次询问 输入两个点 和 要加的值。
在这里插入图片描述
然后调用函数即可。

最后我们再求 该差分数组 的前缀和数组,然后打印即可。

在这里插入图片描述
完整代码如下:

#include <iostream>
using namespace std;

const int N = 1010;
int n, m, q;
int a[N][N], b[N][N];

void addToRange(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]);
    
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            addToRange(i, j, i, j, a[i][j]);
    
    while (q--)
    {
        int x1, y1, x2, y2, c;
        scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c);
        addToRange(x1, y1, x2, y2, c);
    }
    
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            b[i][j] += b[i][j-1] + b[i-1][j] - 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;
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/708055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【产品经理】订单处理2

本次讲解订单初始化成功到ERP系统过程中的后续环节。 一、根据客服备注更新订单信息 初始化订单过程中&#xff0c;若订单中的客服备注信息对订单进行更新&#xff0c;包括可能改收货信息、改商品、加赠品、指定快递等。 注意&#xff1a;更新订单的过程中要注意订单当前状…

漫步者M125便携式蓝牙音箱首发价169

目录 一、音箱音质方面 二、音箱续航方面 三、音箱外观设计 四、音箱连接方面 五、音效方面 六、总结 在这个快节奏的时代&#xff0c;音乐成为了许多人生活中不可或缺的调味剂&#xff0c;一款优质的便携蓝牙音箱&#xff0c;无疑是旅行、户外或居家休闲的理想伴侣。近日…

基于 Redis 实现分布式缓存

一、单节点 Redis 的问题 1.1 存在的问题 1、数据丢失问题&#xff1a;Redis 是内存存储&#xff0c;服务重启可能会丢失数据。 2、并发能力问题&#xff1a;单节点 Redis 并发能力虽然不错&#xff0c;但也无法满足如 618 这样的高并发场景。 3、故障恢复问题&#xff1a;如果…

【机器学习】机器学习赋能医疗健康:从诊断到治疗的智能化革命

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 机器学习在疾病诊断中的应用&#x1f9e9;医学影像分析&#xff1a;从X光到3D成像带代码&#x1…

【B站大神推荐】OBS Studio史上最好用的免费视频录制直播神器,绝无仅有!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 前言 你是不是…

一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案

大家好&#xff0c;今天给大家分享的是一款轻量、安全的问卷系统基座。 XIAOJUSURVEY是一套轻量、安全的问卷系统基座&#xff0c;提供面向个人和企业的一站式产品级解决方案&#xff0c;快速满足各类线上调研场景。 内部系统已沉淀 40种题型&#xff0c;累积精选模板 100&a…

2024年【公路水运工程施工企业安全生产管理人员】报名考试及公路水运工程施工企业安全生产管理人员考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年公路水运工程施工企业安全生产管理人员报名考试为正在备考公路水运工程施工企业安全生产管理人员操作证的学员准备的理论考试专题&#xff0c;每个月更新的公路水运工程施工企业安全生产管理人员考试试卷祝您顺…

Kettle 数据抽取工具使用教程:从入门到实战

一、简介 Kettle 是 Pentaho Data Integration (PDI) 的一个组成部分&#xff0c;是一个开源的数据集成工具。它被广泛用于数据的抽取、转换和加载 (ETL) 过程。Kettle 提供了一个易于使用的图形界面&#xff0c;可以轻松设计和执行 ETL 流程。 github 源码地址&#xff1a;ht…

LLM 大模型学习:量化技术、QLoRA、量化库

模型的推理过程是一个复杂函数的计算过程&#xff0c;这个计算一般以矩阵乘法为主&#xff0c;也就是涉及到了并行计算。一般来说&#xff0c;单核CPU可以进行的计算种类更多&#xff0c;速度更快&#xff0c;但一般都是单条计算&#xff1b;而显卡能进行的都是基础的并行计算&…

javaweb和Mysql学习

javaweb学习 HTML 结构标签 HTML的结构标签分为 <html>&#xff1a;定义HTML文档的根元素。<head>&#xff1a;包含了文档的元&#xff08;meta&#xff09;、标题&#xff08;title&#xff09;、样式表&#xff08;style&#xff09;和脚本&#xff08;scrip…

nginx 启动报错:Failed to start The nginx HTTP and reverse proxy server.

1&#xff0c;启动 nginx报错 systemctl start nginx[rootlaoban yum.repos.d]# systemctl start nginx Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "jetails. [rootlaoban…

俄罗斯Yandex推广投放如何开户?Yandex广告开户和代运营推广流程详解_俄罗斯_受众_搜索引擎

在俄罗斯进行Yandex广告推广是一种有效的在线营销方式&#xff0c;特别是针对俄罗斯市场。Yandex是俄罗斯最受欢迎的搜索引擎&#xff0c;类似于Google在全球范围内的地位。以下是通过Yandex广告推广的一般步骤&#xff0c;以及如何通过上海上弦进行广告开户和代运营。 1. Yan…

STL-常用容器

3.1.1. string基本概念 本质&#xff1a; string是C风格的字符串&#xff0c;char*是C语言风格的字符串string本质上是一个类 string和char*的区别&#xff1a; char*是一个指针string是一个类&#xff0c;类内部封装并负责管理char*&#xff0c;是一个char*型的容器 特点&a…

django-vue-admin 本地部署

一、项目地址 主分支&#xff1a;master&#xff08;稳定版本&#xff09; 开发分支&#xff1a;develop django-vue3-admin-masterhttps://gitee.com/huge-dream/django-vue3-admin 注意&#xff1a;下载master分支zip代码包&#xff0c;解压后删掉web\src\views\syst…

数据结构笔记补充问题

1、假设线性表L采用单链表存储结构&#xff0c;设计一个算法&#xff0c;在L的数据元素最大值之前插入&#xff08;假设L的各个数据元素值不同&#xff09;数据元素x。 基本思想&#xff0c;先查找到最大元素对应的结点&#xff0c;再在之前插入x对应的结点&#xff1b; 设计算…

Android开发AndroidStudio安装教程

本文图示展示AndroidStudio安装教程。 目录 一、下载安装包 二、安装 一、下载安装包 https://developer.android.google.cn/studio?hlzh-cn 二、安装 双击exe Next Next Next 默认点击Install Next 点击finish进入设置文件界面。 如果本地有设置文件&#xff0c;选择C…

Zabbix 7.0 新增功能亮点(二)——history.push API方法

Zabbix7.0LTS一经发布便吸引了众多运维小伙伴的关注&#xff0c;乐维社区forum.lwops.cn也伴随着不少小伙伴的热议与探讨&#xff0c;话不多说&#xff0c;抓紧上车。 前面我们介绍了zabbix 7.0 新增功能亮点&#xff08;一&#xff09;——T参数&#xff0c;本篇将向大家介绍z…

【掌握C++模板进阶】:高级编程的艺术

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

【FreeRTOS】创建任务-声光色影

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 目录 1 基本概念2 任务创建与删除2.1 什么是任务2.2 创建分配内存2.2.1 动态任务2.2.1 静态分配内存 2.3 示例1: 创建任务2.3.1 声2.3.1.1 music.c2.3.1.2 music.h2.3.1.4 硬件接线 2.3.2 光2.3.3 色2.3.4 影 在本章中&a…

海南云亿商务咨询有限公司解锁抖音电商新纪元

在当今数字化浪潮中&#xff0c;抖音电商以其独特的魅力和强大的用户基础&#xff0c;迅速成为企业营销的新宠。海南云亿商务咨询有限公司&#xff0c;作为专注于抖音电商服务的领先企业&#xff0c;凭借专业的团队和丰富的经验&#xff0c;为众多企业提供了高效、精准的电商服…