AcWing 798. 差分矩阵

news2025/3/13 6:31:47

题目来源:

找不到页面 - AcWing


题目内容:

输入一个 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 n,m,q;
int a[N][N],b[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(){
	cin>>n>>m>>q;
 	for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
            cin>>a[i][j];
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= m; j ++ )
            //构建差分数组
            insert(i, j, i, j, a[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-1][j-1];
		} 
	}  
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<b[i][j]<<" ";	
		}
		cout<<endl;
	}
	return 0;
}

题目心得:

  1. 二维差分结论:
    给以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵中的所有元素加上c:
    void insert(int x1,int y1,int x2,int y2,int c)
    {     //对b数组执行插入操作,等价于对a数组中的(x1,y1)到(x2,y2)之间的元素都加上了c
        b[x1][y1]+=c;
        b[x2+1][y1]-=c;
        b[x1][y2+1]-=c;
        b[x2+1][y2+1]+=c;
    }

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

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

相关文章

Docker 部署 MySQL 8 详细图文教程

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

【Python】模式匹配 match语句详解(仅在Python 3.10及以上版本中可用)

文章目录 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)1. 基本语法2. 基本匹配操作2.1 匹配常量2.2 匹配变量2.3 匹配元组2.4 匹配列表2.5 匹配字典2.6 条件匹配 3. 应用场景 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用) Python 3.10 及以上版本中才引…

算法与数据结构(最小栈)

题目 思路 为了返回栈中的最小元素&#xff0c;我们需要额外维护一个辅助栈 min_stack&#xff0c;它的作用是记录当前栈中的最小值。 min_stack的作用&#xff1a; min_stack的栈顶元素始终是当前栈 st 中的最小值。 每当st中压入一个新元素时&#xff0c;如果这个元素小于等…

openCV中如何实现滤波

图像滤波用于去除噪声和图像平滑&#xff0c;OpenCV 提供了多种滤波器&#xff1a; 1.1. 均值滤波&#xff1a; import cv2# 读取图像 image cv2.imread("example.jpg")# 均值滤波 blurred_image cv2.blur(image, (5, 5)) # (5, 5) 是滤波核的大小 滤波核大小的…

2025 BabitMF 第一期开源有奖活动正式开启 !

为了促进开源社区的交流与成长&#xff0c;字节跳动开源的多媒体处理框架 BabitMF &#xff08;GitHub - BabitMF/bmf: Cross-platform, customizable multimedia/video processing framework. With strong GPU acceleration, heterogeneous design, multi-language support, e…

Docker 安装和配置 Nginx 详细图文教程

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

链表和list

链表和list ‍ ​ ​ ​ ​ ​ ​ ​ ​ ​ 算法题中的经典操作&#xff1a;用空间代替时间​ ​ ​ ​ 双链表头插顺序&#xff1a; 1.先修改新结点的左右指针 2.然后修改结点y的左指针 3.最后修改哨兵位的右指针 双链表在任意位置&#xff08;p&#xff09;之后插入…

深度学习机器学习:常用激活函数(activation function)详解

目录 Sigmoid Function ReLU&#xff08;Rectified Linear Unit&#xff09; LeakyReLU&#xff08;Leaky Rectified Linear Unit&#xff09; ClippedReLU&#xff08;Clipped Rectified Linear Unit&#xff09; PRelu&#xff08;Parametric ReLU&#xff09; Tanh&am…

AIGC图生视频保姆级教程

一、AI文生图高阶技巧 推荐工具 ▸ MidJourney&#xff08;艺术感最强&#xff09; ▸ DALLE 3&#xff08;与ChatGPT深度联动&#xff09; ▸ Leonardo.ai&#xff08;精细化参数控制&#xff09; 核心策略 提示词架构&#xff1a; [主体描述][环境氛围][镜头语言][风格参数…

下载安装运行测试开源vision-language-action(VLA)模型OpenVLA

1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码&#xff0c;执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…

【Zookeeper如何实现分布式锁?】

Zookeeper如何实现分布式锁? 一、ZooKeeper分布式锁的实现原理二、ZooKeeper分布式锁的实现流程三、示例代码四、总结一、ZooKeeper分布式锁的实现原理 ZooKeeper是一个开源的分布式协调服务,它提供了一个分布式文件系统的接口,可以用来存储和管理分布式系统的配置信息。 …

【MySQL】环境变量配置

环境变量英文名SystemRoot&#xff0c;直译为“系统总&#xff08;根&#xff09;目录"&#xff0c;主要指明操作系统的重要目录在哪里。那么配置MySQL的环境变量&#xff0c;就是在程序运行时&#xff0c;告诉操作系统你的MySQL目录位置。 复制MySQL安装目录&#xff1a;…

为AI聊天工具添加一个知识系统 之103 详细设计之44 自性三藏 之4 祖传代码 之2

本文要点 要点 前面的所有讨论都是为了给出我的设计项目&#xff08;为使用AI聊天工具的聊天者 开挂一个知识系统&#xff09; 的祖传代码 的完整设计&#xff0c;其中 的“槽”&#xff08;占位符变量&#xff09;的 库元&#xff08;宝性和自性creator -本俱 替换内容标准模…

假面与演员:到底是接口在使用类,还是类在使用接口?编程接口与物理接口的区别又是什么?

前言&#xff1a;本篇文章解释了接口学习过程中的2个常见问题&#xff0c;一个是“为什么是类在使用接口”&#xff0c;另一个一个是“编程接口与物理接口的差异源于所处的抽象层次和交互模式的不同”&#xff0c;旨在揭示编程接口的本质。 Part1.是类在使用接口 当学习接口时…

C# 添加图标

一、前言 为应用程序添加图标是优化用户界面、提升应用辨识度的重要操作。合适的图标能帮助用户快速识别和区分不同应用&#xff0c;增强应用的易用性和专业性。 本指南旨在为你提供详细、易懂的步骤&#xff0c;教你如何为应用程序的窗体添加图标。从图标素材的获取到具体的…

Docker 入门与实战:从安装到容器管理的完整指南

&#x1f680; Docker 入门与实战&#xff1a;从安装到容器管理的完整指南 &#x1f31f; &#x1f4d6; 简介 在现代软件开发中&#xff0c;容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊&#xff0c;以其轻量级、高效和跨平台的特性&#xff0c;深…

HCIA项目实践---ACL访问控制列表相关知识和配置过程

十 ACL访问控制列表 1 策略的概念 在网络连通之后&#xff0c; 把所有为了追求控制而实现的技术都叫策略 2 访问控制 在路由器流量流入或者流出的接口上&#xff0c;匹配流量&#xff0c;执行相应的动作。&#xff08;流量流入或者流出的接口并不是一个固定的概念而是一个相对的…

细说STM32F407单片机RTC入侵检测和时间戳的原理及使用方法

目录 一、入侵检测的功能 二、示例功能 三、项目设置 1、晶振、DEBUG、CodeGenerator、USART6、KEYLED 2、RTC &#xff08;1&#xff09;设置RTC的模式。 &#xff08;2&#xff09;General、Time、Date\Wake Up分组 &#xff08;3&#xff09;Tamper分组 1&#xff…

搜狗浏览器卸载教程

需求背景 今天发现geek居然无法卸载搜狗浏览器&#xff0c;作为一个老司机&#xff0c;这是不允许的。如果你使用geek或者windows的卸载&#xff0c;或者直接在它的安装包的Uninstall.exe中卸载&#xff0c;他走到100%就一直不动了。那玩意是假的。 卸载教程 结束 -----华丽的…

音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现

一、引言 由《音视频入门基础&#xff1a;RTP专题&#xff08;2&#xff09;——使用FFmpeg命令生成RTP流》可以知道&#xff0c;推流端通过下面FFmpeg命令可以将一个媒体文件转推RTP&#xff0c;生成RTP流&#xff1a; ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec cop…