蓝桥赛前复习2:一维差分二维差分
一维差分
问题描述
给定一个长度为 nn 的序列 aa。
再给定 mm 组操作,每次操作给定 33 个正整数 l,r,dl,r,d,表示对 al∼ral∼r 中的所有数增加 dd。
最终输出操作结束后的序列 aa。
Update:由于评测机过快,n,mn,m 于 2024-12-09 从 105105 加强至 2×1052×105,杜绝暴力通过本题。
输入格式
第一行输入两个正整数 n,mn,m。(1≤n,m≤2×1051≤n,m≤2×105)
第二行输入 nn 个正整数 aiai。(1≤i≤n,1≤ai≤1041≤i≤n,1≤ai≤104)。
接下来 mm 行,每行输入 33 个正整数 l,r,dl,r,d。(1≤l≤r≤n,−104≤d≤1041≤l≤r≤n,−104≤d≤104)。
输出格式
输出 nn 个整数,表示操作结束后的序列 aa。
样例输入
6 3
1 2 2 1 2 1
1 3 1
3 5 1
1 6 1
样例输出
3 4 5 3 4 2
#include <bits/stdc++.h>
using namespace std;int main(){int n,q;cin >> n >> q;vector<int> a(n+1,0);for(int i=1;i<=n;i++){cin >> a[i];}vector<int> diff(n+1,0);while(q--){int x1,y1,d;cin >> x1 >> y1 >> d;diff[x1] += d;if(y1+1 <= n){diff[y1+1] -= d;}}for(int i=1;i<=n;i++){diff[i] += diff[i-1];a[i] += diff[i];}for(int i=1;i<=n;i++){cout << a[i] << " ";}
}
二维差分
问题描述
给定一个 n×mn×m 大小的矩阵 AA。
给定 qq 组操作,每次操作为给定 55 个正整数 x1,y1,x2,y2,dx1,y1,x2,y2,d,Ax1,y1Ax1,y1 是子矩阵左上角端点,Ax2,y2Ax2,y2 是子矩阵右下角端点,你需要给其中每个元素都增加 dd。
输出操作结束后的矩阵 AA。
输入格式
第一行输入 33 个正整数 n,m,qn,m,q。(1≤n,m≤103,1≤q≤1051≤n,m≤103,1≤q≤105)
接下来 nn 行每行输入 mm 个整数,表示 Ai,jAi,j。(−103≤Ai,j≤103,1≤i≤n,1≤j≤m)(−103≤Ai,j≤103,1≤i≤n,1≤j≤m)
接下来 qq 行,每行输入 55 个正整数 x1,y1,x2,y2,dx1,y1,x2,y2,d。(1≤x1≤x2≤n,1≤y1≤y2≤m,−103≤d≤103)(1≤x1≤x2≤n,1≤y1≤y2≤m,−103≤d≤103)
输出格式
输出 nn 行 mm 个整数,表示操作结束后的矩阵 AA。
样例输入
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
二维差分的举例:
假设我们有一个 4x4 的矩阵,并且我们需要对子矩阵 (1,1) 到 (3,3) 所有元素加 5
想变成
就可以用差分来做
差分数组diff样子

按四点更新规则diff数组会变成这个样子


然后每行从左到右累加:

再然后每列从上到下累加:

下面代码:
#include <iostream>
#include <vector>using namespace std;void solve() {int n, m, q;cin >> n >> m >> q;vector<vector<int>> A(n + 1, vector<int>(m + 1, 0));vector<vector<int>> diff(n + 1, vector<int>(m + 1, 0));for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {cin >> A[i][j];}}for (int i = 0; i < q; ++i) {int x1, y1, x2, y2, d;cin >> x1 >> y1 >> x2 >> y2 >> d;diff[x1][y1] += d;if (x2 + 1 <= n) diff[x2 + 1][y1] -= d;if (y2 + 1 <= m) diff[x1][y2 + 1] -= d;if (x2 + 1 <= n && y2 + 1 <= m) diff[x2 + 1][y2 + 1] += d;}//一步到位的前缀和累加for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {diff[i][j] += diff[i - 1][j]; //累加上方diff[i][j] += diff[i][j - 1]; //累加左方diff[i][j] -= diff[i - 1][j - 1]; //减去重复累加的左上角A[i][j] += diff[i][j]; //更新矩阵元素}}for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {cout << A[i][j] << " ";}cout << endl;}
}int main() {solve();return 0;
}
相关文章:
蓝桥赛前复习2:一维差分二维差分
一维差分 问题描述 给定一个长度为 nn 的序列 aa。 再给定 mm 组操作,每次操作给定 33 个正整数 l,r,dl,r,d,表示对 al∼ral∼r 中的所有数增加 dd。 最终输出操作结束后的序列 aa。 Update:由于评测机过快,n,mn,m 于 2024…...
算法---子序列[动态规划解决](最长递增子序列)
最长递增子序列 子序列包含子数组! 说白了,要用到双层循环! 用双层循环中的dp[i]和dp[j]把所有子序列情况考虑到位 class Solution { public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums.size(),1);for(int i …...
100道C#高频经典面试题带解析答案——全面C#知识点总结
100道C#高频经典面试题带解析答案 以下是100道C#高频经典面试题及其详细解析,涵盖基础语法、面向对象编程、集合、异步编程、LINQ等多个方面,旨在帮助初学者和有经验的开发者全面准备C#相关面试。 🧑 博主简介:CSDN博客专家、CSD…...
jar包安全加密工具
目录 1. 代码混淆工具(Obfuscation) 推荐工具 (1) ProGuard (2) Allatori (3) DashO 2. JAR 加密工具(Class 文件加密) 推荐工具 (1) JxCore (2) ClassFinal (3) Zelix KlassMaster 3. 自定义类加载器加密 实现思路 4. 打包成 Native 可执行文件 推荐工具 (…...
MQTT的构成、使用场景、工作原理介绍
一、MQTT内容简介 MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议【适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境】它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的…...
RESTful API以及使用它构建 web 应用程序的方法
RESTful API是一种基于REST(Representational State Transfer)架构风格的应用程序接口,通过HTTP协议传输数据并使用标准的HTTP方法(GET、POST、PUT、DELETE)来对资源进行操作。 RESTful API 遵循一系列约定和规范&…...
Vanna + qwq32b 实现 text2SQL
Vanna 是一个开源的 Text-2-SQL 框架,主要用于通过自然语言生成 SQL 查询,它基于 RAG(Retrieval-Augmented Generation,检索增强生成)技术。Vanna 的核心功能是通过训练一个模型(基于数据库的元数据和用户提…...
电脑知识 | TCP通俗易懂详解 <一>
目录 一、👋🏻前言 二、🚍什么是TCP/TCP协议 三、🧍♂为什么TCP可靠 1.🥰关于可靠 2.🤠哪里可靠 3.🎓️图片的三次握手,四次挥手 4.📚️知识点总结 四、&…...
精品推荐-最新大模型MCP核心架构及最佳实践资料合集(18份).zip
精品推荐-最新大模型MCP核心架构及最佳实践资料合集,共18份。 1、2025年程序员必学技能:大模型MCP核心技术.pdf 2、MCP 架构设计剖析:从 Service Mesh 演进到 Agentic Mesh.pdf 3、MCP 架构设计深度剖析:使用 Spring AI MCP 四步…...
Linux 线程:从零构建多线程应用:系统化解析线程API与底层设计逻辑
线程 线程的概述 在之前,我们常把进程定义为 程序执行的实例,实际不然,进程实际上只是维护应用程序的各种资源,并不执行什么。真正执行具体任务的是线程。 那为什么之前直接执行a.out的时候,没有这种感受呢…...
VMware虚拟机Ubuntu磁盘扩容
VMware中操作: 选择要扩容的虚拟机,点击编辑虚拟机设置 打开后点击磁盘——>点击扩展(注意:如果想要扩容的话需要删除快照) 调整到你想要的容量 点击上图的扩展——>确定 然后我们进到虚拟机里面 首先&#…...
游戏引擎学习第217天
运行游戏并在 FreeVariableGroup 中遇到我们的断言 其实在美国,某些特定的小糖果(例如小糖蛋)只在圣诞节和复活节期间出售,导致有些人像我一样在这段时间吃得过多,进而增加体重。虽然这种情况每年都会发生,…...
Day 8 上篇:深入理解 Linux 驱动模型中的平台驱动与总线驱动
B站相应的视屏教程: 📌 内核:博文视频 - 总线驱动模型实战全解析 —— 以 PCA9450 PMIC 为例 敬请关注,记得标为原始粉丝。 在 Linux 内核驱动模型中,设备与驱动的组织方式不是随意堆砌,而是基于清晰的分类…...
freertos内存管理简要概述
概述 内存管理的重要性 在嵌入式系统中,内存资源通常是有限的。合理的内存管理可以确保系统高效、稳定地运行,避免因内存泄漏、碎片化等问题导致系统崩溃或性能下降。FreeRTOS 的内存管理机制有助于开发者灵活地分配和释放内存,提高内存利用…...
Dify问题记录 (一)
问题背景 Dify智能体将含有中文的JSON参数传递到Java后端时出现乱码。 解决办法 在HTTP节点前添加代码执行节点,将参数强制编码为UTF-8格式。在Java后端代码中进行解码操作,以确保参数的正确性。 代码如下: 代码执行节点中代码 function main({arg…...
全新突破 | 更全面 · 更安全 · 更灵活
xFile 高可用存储网关 2.0 重磅推出,新增多空间隔离功能从根源上防止数据冲突,保障各业务数据的安全性与独立性。同时支持 NFS、CIFS、FTP 等多种主流文件协议,无需繁琐的数据拷贝转换,即可与现有系统无缝对接,降低集成…...
使用Python建立双缝干涉模型
引言 双缝干涉实验是物理学中经典的实验之一,它展示了光的波动性以及量子力学的奇异性。实验结果表明,当光或粒子通过两条狭缝时,它们会产生干涉现象,形成明暗相间的条纹图案。这种现象不仅说明了光的波动性,还揭示了量子力学的核心思想——粒子具有波动性。今天,我们将…...
T-Box车载系统介绍及其应用
定义 T-Box汽车系统,全称为Telematics - BOX,也常简称为车载T - BOX,是汽车智能系统及车联网系统中的核心组成部分,是安装在车辆上的一种高科技远程信息处理器。 工作原理 T-Box的核心功能主要通过MPU和MCU实现。MPU负责应用程序功…...
SQLyog使用教程
准备工作 链接本地数据库 准备 1:安装mySQL数据库 2:安装SQLyong 连接本地数据库 打开SQLyong应用,将会出现下面的页面 点击新建,输入链接名 输入密码,点击 连接 按钮 如果出现连接错误,且错误号为2058…...
for循环的优化方式、循环的种类、使用及平替方案。
本篇文章主要围绕for循环,来讲解循环处理数据中常见的六种方式及其特点,性能。通过本篇文章你可以快速了解循环的概念,以及循环在实际使用过程中的调优方案。 作者:任聪聪 日期:2025年4月11日 一、循环的种类 1.1 默认有以下类型 原始 for 循环 for(i = 0;i<10;i++){…...
使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示
使用 Python 扫描 Windows 下的 Wi-Fi 网络 代码实现代码解析 1. 导入库2. 解码混合编码3. 扫描 Wi-Fi 网络4. 运行函数 这是我当前电脑的 wifi 连接界面。 这个是运行的效果图: 代码实现 我们使用了 Python 的 subprocess 模块来调用 Windows 的内置命令 netsh…...
python manimgl数学动画演示_微积分_线性代数原理_ubuntu安装问题[已解决]
1.背景 最近调研python opencv, cuda加速矩阵/向量运算, 对于矩阵的线性变换, 秩, 转秩, 行列式变化等概概念模糊不清. 大概课本依旧是天书, 于是上B站搜索线性代数, 看到 3Blue1Brown 线性变换本质 视频, 点击观看. 惊为天人 --> 豁然开朗 --> 突然顿悟 --> 开心不已…...
【vue3】@click函数传动态变量参数
根据java的学习,摸索了一下vue3 函数传参的方式。以此作为记录。有更好的其它方式,可以评论区补充。 <script> const tmpref(); </script><button click"tmpFunction(传递参数:tmp)">按钮</button> // 直接【字符串…...
用matplotlib生成一个炫酷的爱心
下面是结合数学方程和可视化技巧,生成一个炫酷的爱心效果: import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 创建画布 fig plt.figure(figsize(8, 8)) ax plt.axes(xlim(-2.5, 2.5), ylim(-3,…...
【leetcode hot 100 300】最长递增子序列
错误解法:在每次更新db[i]时,如果当前nums[i]>nums[i-1]就db[i-1]1,否则db[i-1] class Solution {public int lengthOfLIS(int[] nums) {int n nums.length;int[] db new int[n]; // db[i]表示到i的最长严格递增子序列的长度db[0] 1;f…...
oracle 12c密码长度,复杂度查看与设置
一 密码长度和复杂度 Oracle 数据库通过 PASSWORD_VERIFY_FUNCTION 来控制密码复杂度。 1.1 查看当前的密码复杂度设置 SELECT * FROM dba_profiles WHERE resource_name PASSWORD_VERIFY_FUNCTION; LIMIT表示分配给该 PROFILE 的密码验证函数名称。如果为 NULL,…...
数据结构——哈希技术及链地址法
目录 一、哈希的定义 二、哈希冲突定义 三、构造哈希函数的方法 四、四种解决哈希冲突的方法 4.1 开放地址法 4.2 链地址法 4.3 再散列函数法 4.4 公共区溢出法 五、链地址法结构体设计 六、基本操作的实现 6.1 哈希函数 6.2 初始化 6.3 插入值 6.4 删除值 6.5 查…...
开源CMS的模块化设计和API接口如何具体影响其扩展性?
优秀的CMS系统都有自己主打的特点,开源CMS凭借其灵活性和低成本优势占据了市场主流地位,而模块化设计与API接口正是其扩展性的两大基石。本文将深入探讨这两大技术特性是如何影响cms的扩展性的。 一、模块化设计:功能解耦与生态繁荣的引擎 …...
【Docker】快速部署 Certbot 并为 Nginx 服务器配置 SSL/TLS 证书
【Docker】快速部署 Certbot 并为 Nginx 服务器配置 SSL/TLS 证书 引言 Certbot 是一个免费的开源工具,用于自动化管理和获取 SSL/TLS 证书,主要用于与 Let’s Encrypt 证书颁发机构交互。 步骤 Nginx 挂载 certbot 文件夹。 docker run -d \--name…...
Redis下载稳定版本5.0.4
https://www.redis.net.cn/download/ Redis下载 Redis 版本号采用标准惯例:主版本号.副版本号.补丁级别,一个副版本号就标记为一个标准发行版本,例如 1.2,2.0,2.2,2.4,2.6,2.8,奇数的副版本号用来表示非标准版本,例如2.9.x发行版本是Redis 3.0标准版本的非标准发行版本…...
