二维差分---基础算法

news2024/12/28 2:50:26

书接上回

a二维数组是b二维数组的前缀和数组,b二维数组是a二维数组的差分数组,也就是说a[i][j]=b[1][1]+b[1][2] + ......b[i][1] + b[i][2] + ...... b[i][j] ,下图是b的二维数组

如图,当你想要整个矩阵中的一个子矩阵都加上一个C,如果我们将b[x1][x2]加上C,那么a数组右下角所有的区域都会加上C,可是我们只想其中的子矩阵加上C,那么如何解决呢?照猫画虎就行,如下图

b[x2+1][y2]减去C,那么图中青绿色的区域都会减去C,b[x1][y1+1]减去C,那么图中绿色区域都会减去C,很明显这样的操作会对红色区域减去两个C,所以b[x2+1][y2+1]加上C,那么红色区域都会加上C

所以就是

b[x1][x2]+=C

b[x2+1][y2]-=C

b[x1][y1+1]-=C

b[x2+1][y2+1]+=C

很好,根据上一篇文章,可以很容易得到插入函数

题目

题目描述
输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。

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

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

输入格式
第一行包含整数n,m,q。

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

接下来q行,每行包含5个整数x1, y1, x2, y2, c,表示一个操作。

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

数据范围
1≤n,m≤1000,
1≤q≤100000,
1≤x1≤x2≤n,
1≤y1≤y2≤m,
−1000≤c≤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

代码

#include <iostream>

using namespace std;

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

int n, m, q;


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(void)
{
	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]);
		}
	}


	while (q--)
	{
		int x1, y1, x2, 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];
			printf("%d ", b[i][j]);
		}
		printf("\n");
	}
	

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.3 栈的表示和操作的实现

3.3.1 栈的类型定义 主要内容&#xff1a; 这段文字中包含了很多栈数据结构的基本概念和操作。 ### 3.3 栈的表示和操作的实现 #### 3.3.1 栈的类型定义 1. **数据对象**&#xff1a; - 定义了一个数据对象集合&#xff0c;记作 D {a1, a2, ..., an}&#xff0c;其…

一维的差分

差分的方法 差分实际上是前缀和的逆运算 ,这个关系和 积分与求导 的关系类似 例如有数组 ...... 和构造数组 ...... 我们要使得a数组是b数组的前缀和 ...... 那么该如何构造b数组呢? 令 , …

使用带有示例和代码的因式分解机的推荐系统

一、说明 在我之前的文章中&#xff0c;我讨论了推荐系统的基础知识、矩阵分解和神经协同过滤 &#xff08;NCF&#xff09;&#xff0c;您可以在下面的“我的博客”部分找到它们。接下来&#xff0c;这次我将通过示例和代码来探索因式分解机器。 将因子分解机用于推荐系统的一…

pytorch无法使用cuda

import torch # 如果pytorch安装成功即可导入 print(torch.cuda.is_available()) # 查看CUDA是否可用 print(torch.cuda.device_count()) # 查看可用的CUDA数量 print(torch.version.cuda) # 查看CUDA的版本号#False #0 #None 表明安装失败&#xff01;查看安装包&#xff1a;…

Gin框架---基础综述

目录 一&#xff1a;经典入门案例二&#xff1a;请求参数2.1: API参数2.2: URL参数2.3: 表单参数 三&#xff1a; 响应参数四&#xff1a;数据解析和绑定4.1: JSON数据解析绑定4.2: FROM表单数据解析和绑定 五&#xff1a; 路由组六&#xff1a;异步处理七&#xff1a;中间件7.…

【UE】刀光粒子效果——part1

效果 步骤 1. 打开3dsmax&#xff0c;首先新建一个管状体 转成可编辑多边形后&#xff0c;删除多余的面&#xff0c;只保留一层 选择内圈将其拉高5mm 在修改器列表中添加“UVW展开” 点击打开“UV编辑器” 选中左边所有的顶点 将其拖拽到最左边 将右边的点拖拽到最右边 关闭 “…

VR古迹复原——数字化复原圆明园,开创文化遗产保护新方式

圆明园是中国历史上一处重要的文化遗产&#xff0c;曾经被誉为“万园之园”&#xff0c;但在1860年的英法联军侵华战争中被毁。近年来&#xff0c;虚拟现实技术不断发展&#xff0c;广州华锐互动利用VR全景技术复原了圆明园&#xff0c;通过VR设备&#xff0c;人们可以在家中就…

浏览器面试题

浏览器面试题 1.常见的浏览器内核有哪些&#xff1f;2.浏览器的主要组成部分有哪些&#xff1f;3.说一说从输入URL到页面呈现发生了什么&#xff1f;4.浏览器重绘域重排的区别&#xff1f;5.CSS加载会阻塞DOM吗&#xff1f;6.JS会阻塞页面吗&#xff1f;7.说一说浏览器的缓存机…

基于ASP.NET的驾校管理系统设计与实现

摘 要 伴随国民经济的飞速发展和人民生活水平的不断提高&#xff0c;家用汽车在我国逐渐普及。面对不断增长的庞大的用户群&#xff0c;随之产生的驾驶培训行业&#xff0c;规模不断扩大。近年来&#xff0c;随着Internet的迅速发展以及网页制作技术的日臻完善&#xff0c;驾校…

win10查看并设置tomcat的jvm堆内存参数

win10查看并设置tomcat的jvm堆内存参数 查看 进入命令行 通过Winr命令输入cmd进入命令行页面 进入到jdk的bin目录 D: cd D:\Y4ECSRUN\WGQ4 Java jdk1.8.0 131\bin执行jps查看进程pid D:\Y4ECSRUN\WGQ4 Java jdk1.8.0 131\bin>jps 16528 Jps 6868 Bootstrap通过jmap查看…

【客户案例】脊叶架构(Spine-Leaf)的云化园区网络部署实践

前言 各行业数字化转型进程加快&#xff0c;作为基础设施的园区网络也面临着升级压力。为此&#xff0c;星融元通过将先进成熟的云网络建设理念引入园区场景&#xff0c;推出了“云化园区网络解决方案”&#xff0c;帮助客户网络实现架构级的深层优化。 云化园区网络解决方案介…

python 综合练习

条件&#xff1a;ML100k.data 注意&#xff1a;程序对列表进行修改&#xff0c;为避免列表索引出现问题&#xff0c;避免使用for i in range(len(data)),而使用for i in data可避免这一问题 import pickle data [] with open("ML100k.data", r) as file:for line …

从零开始的PICO教程(0) -- 教程大纲

从零开始的PICO教程&#xff08;0&#xff09; – 教程大纲 一、前言 1、写这个教程的原因 第一个原因是&#xff0c;相关教程较少。搜了搜B站和各个搜索引擎&#xff0c;感觉PICO开发这类的教程还比较少&#xff0c;遂记录一下我的学习的过程&#xff0c;为VR生态建设提供一…

左神算法之中级提升班(9)

【案例1】 【题目描述】 【思路解析】 因为它数字的范围只能为1 - n&#xff0c;然后数组范围0 - n-1&#xff0c;所以说如果没有缺失值的话&#xff0c;每个i位置应该放i 1&#xff0c;所以我们直接对每个数组完成这个操作&#xff0c;让每个i位置尽可能放i1&#xff0c;如…

C++(三)——运算符重载

运算符重载 重定义或重载大部分 C 内置的运算符就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数&#xff0c;函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样&#xff0c;重载运算符有一个返回类型和一个参数列表。不能为了重载而重…

GeoServer 安装及使用教程

GeoServer 安装及使用教程 一、前言二、安装1. 下载和安装Java2. 下载、安装、部署GeoServer3. 启动GeoServer4. 发布数据5. 结论 一、前言 GeoServer是一个开源的地理空间数据服务器&#xff0c;可以将地图数据发布为Web服务。在本篇教程中&#xff0c;我们将介绍如何安装GeoS…

B站:AB test [下]

Focus在&#xff1a;AB Test结束后&#xff0c;如何进行显著性检验&#xff1f;&#xff08;以判断改动是否有效果&#xff09; 引入&#xff1a;Z检验和T检验 而T检验适用于 n<30 的小样本 值得注意的是&#xff1a;统计上显著并不意味着现实中显著&#xff01; e.g. 加速…

Vue面试题以及解答(持续扩展中.....)

##Vue面试题## 1.组件中通讯方式有哪些 组件中通讯有$emit&#xff0c;props&#xff0c;vuex&#xff0c;provid和inject&#xff0c;$parent/$children&#xff0c;$refs&#xff0c;全局总线时间EvenBus&#xff0c;订阅与发布模式的subscrip/publish 2.Vue2和Vue3的区别…

尚硅谷大数据项目《在线教育之实时数仓》笔记001

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 P001 P002 P003 P004 P005 P001 以在线教育采集系统和离线数仓为前置基础&#xff0c;分为三个部分讲解&#xff1a;实时数仓架构介绍、数仓模型搭建、Suger可视化大屏展示。 P002 P0…

机票预定系统的软件工程分析报告

目 录 1 项目开发计划书……………………………………………………&#xff08;页码&#xff09; 2 软件需求规格说明书………………………………………………&#xff08;页码&#xff09; 3设计规格说明书……………………………………………………&#xff08;页码&…