acwing算法基础-chapter01-差分

差分介绍

结论:差分是前缀和的逆运算

举例

一维差分
//一维前缀和 a[i]部分就是一维差分数组
s[i] = s[i-1]+a[i];
//一维差分 
a[i] = s[i]-s[i-1];
二维差分
//二维前缀和 a[i][j]部分就是一维差分数组
s[i][j] = s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
//二维差分
a[i][j] = s[i][j]-s[i-1][j]-s[i][j-1]+s[i-1][j-1];

差分用法

用在一维子区间里的数都增减一个固定值,把对于区间内每个数的操作转换为对于差分数组中的端点的操作,时间复杂度降为o(1)。

用在二维子矩阵里的数都增减一个固定值,把对于子矩阵的每个数的操作转换为对应差分二维数组各个端点的操作。

总体思想就是在需要处理的区间范围内增减一个固定值,在影响到的其他范围内需要恢复,即相反操作。

举例

一维差分

差分数组在左端点增加c之后,会影响以其开始前缀和都增加c。所以为了确保只有LR这段增加c,需要从R+1开始减少c,即差分数组在R+1处减去c。

b[l]+=c;
b[r+1]-=c;

image-20230920173203393

二维差分

在 二维差分数组(x1,y1)增加会使得以(x1,y1)(n,m)范围内所有的数都增加c。所以为了确保只有(x1,y1)-(x2,y2)范围内数值增加c,则需要消除绿色部分的影响,做逆向操作。

b[x1][y1] += c;
b[x1][y2+1] -= c; //逆操作1
b[x2+1][y1] -= c;//逆操作2
b[x2+1][y2+1] +=c;//这块区域在逆操作1和2中减了两次,所以需要加上一次

image-20230920173814571

差分使用技巧

朴素思维

正常想法会先接收初始数组的输入,然后再计算每个差分数组。

一维数组
for(int i=1;i<=n;i++){cin >> a[i];b[i] = a[i]-a[i-1];
}
while(q--){int l,r,c;cin >>l>>r>>c;b[l] +=c;b[r+1] -=c;
}
二维数组
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin >>a[i][j];b[i][j] = a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1];}while(q--){int x1,y1,x2,y2,c;cin >>x1>>y1>>x2>>y2>>c;b[x1][y1] +=c;b[x1][y2+1] -=c;b[x2+1][y1] -=c;b[x2+1][y2+1] +=c;
}

简化思维

把全0当做初始数组,即初始的差分数组都是0,。接收输入的时候就执行差分数组的修改操作,当接收问询的时候 也当做是执行差分数组的修改操作。这样就不用额外计算差分数组的具体值。

一维数组

void insert(int l,int r,int c){b[l] +=c;b[r+1] -=c;
}
for(int i=1;i<=n;i++){cin >> a[i];insert(i,i,a[i]); //起始点i到结束点i,只有一个元素的区间
}
while(q--){int l,r,c;cin >>l>>r>>c;insert(l,r,c);c
}
二维数组
void insert(int x1,int y1,int x2,int y2,int c){b[x1][y1] +=c;b[x1][y2+1] -=c;b[x2+1][y1] -=c;b[x2+1][y2+1] +=c;
}
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin >>a[i][j];insert(i,j,i,j,a[i][j]); //起始点(i,j)到(i,j)只有一个元素的矩阵}while(q--){int x1,y1,x2,y2,c;cin >>x1>>y1>>x2>>y2>>c;insert(x1,y1,x2,y2,c);}

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

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

相关文章

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测。…

北工大汇编——综合题(1)

题目要求 统计字符数。从键盘输入一行字符&#xff0c;统计字母、空格、数字、其他宇符的个数&#xff0c;并显示。要求&#xff1a;提示输入一行宇符串&#xff1b;键盘输入宇符串&#xff0c;Enter 键结束输入&#xff0c;并换行显示结果。 题目代码 DATAS SEGMENT;此处输…

提前放电避雷针防雷综合应用方案

放电避雷针是一种利用电离空气提前放电的避雷装置&#xff0c;可以有效地保护建筑物、设备和人员免受雷电的危害。放电避雷针有多种类型&#xff0c;根据其放电机理和结构特点&#xff0c;可以分为以下几类&#xff1a; 地凯科技预放电避雷针&#xff1a;这种避雷针利用雷云产…

图神经网络系列之消息传递

文章目录 1.前言2.消息传递机制1.RecGNN2.ConvGNNs3.GAT 1.前言 相比较于神经网络最基本的网络结构全连接层&#xff08;MLP&#xff09;&#xff0c;特征矩阵乘以权重矩阵&#xff0c;图神经网络多了一个邻接矩阵。计算形式很简单&#xff0c;三个矩阵相乘再加上一个非线性变…

C++之类和函数权限访问总结(二百二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

数据集笔记:T-drive 北京出租车轨迹数据

数据地址&#xff1a;T-Drive trajectory data sample - Microsoft Research 1 数据描述 此数据集包含了2008年2月2日至2月8日在北京期间10,357辆出租车的GPS轨迹。此数据集中的总点数约为1500万&#xff0c;轨迹的总距离达到了900万公里。图1显示了两个连续点之间的时间间隔和…

数据通信——传输层TCP(超时时间选择)

引言 TCP每一次发送报文段&#xff0c;就会对这个报文段设置一次计时器。如果时间到了却没有收到确认报文&#xff0c;那么就要重传该报文。 这个之前在TCP传输的机制中提到过&#xff0c;这个章节就来研究一下超时时间问题。 关于加权的概念 有必要提及一下加权的概念&#x…

typescrip接口 interface详解,以及ts实现多态

ts 接口 当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的 示例如下 当一个对象类型被多次使用时,可以看到,很明显代码有大量的冗余 let personTom: { name: string, age?: number, sayHi(name: string): void } {name: Tom,sayHi(n…

软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1

目录 项目总览 开发准备 开发步骤 角色分工 软件环境 项目介绍 产品原型 技术选型 开发环境搭建 前端:默认已有 后端 使用Git版本控制 数据库环境搭建 前后端联调 ​登录功能完善 导入接口文档 使用swagger​ 和yapi的区别 常用注解 项目总览 开发准备 开发步骤…

【js】navigator.mediaDevices.getDisplayMedia实现屏幕共享:

文章目录 一、效果图:二、实现思路:三、实现代码: 一、效果图: 二、实现思路: 文档&#xff1a; 【MDN】https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/mediaDevices web技术分享| WebRTC 实现屏幕共享 面试官&#xff1a;纯前端如何实现录屏并保存视频到本地&a…

企业电子招投标采购系统源码之电子招投标的组成

功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外部供…

云计算行业人才缺口巨大,给自己一个超车涨薪的机会!

2023年了&#xff0c;云计算已经不是未来趋势&#xff0c;而是我们正处于的环境&#xff01; 你一定用过云笔记、云盘吧&#xff1f;大家其实都在跟“云”打交道&#xff01;我们如今所处的时代中&#xff0c;云计算无疑是当下最热门的技术。 各大中小企业都在纷纷是将自己的…

spring boot 时间格式化输出

目录标题 一、spring boot 序列化二、 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")和JSONField(format "yyyy-MM-dd HH:mm:ss")区别三、在实体类中序列化时间&#xff08;格式化输出&#xff09;&#xff08;一&#xff09;使用JsonFormat&#xff08;二…

期权开户流程、交易时间和规则详解清晰易懂

本文将介绍期权开户流程、交易时间和规则详解清晰易懂则&#xff0c;包括期权的定义、期权交易的时间、期权交易的规则和期权交易的风险。本文的结论是&#xff0c;期权交易的时间和规则非常重要&#xff0c;应该遵守交易规则&#xff0c;并且要注意风险。本文来源&#xff1a;…

RS485以及MODBUS学习

学习目的&#xff1a; 1、什么是485&#xff1f; 2、485如何通信&#xff1f; 3、如何使用熟能生巧&#xff1f; RS485是一种四总线通信&#xff0c;分别是VCC、GND、485_A、485_B。两根负责通信&#xff0c;两根负责进行供电。 RS485通信 硬件层&#xff1a;解决的是数据传输问…

以酒为媒、以酒载道,五粮液携手首届“金熊猫奖”,讲好中国白酒故事

执笔 | 尼 奥 编辑 | 萧 萧 这是一次光影艺术与白酒酿造的和美之约&#xff0c;也是中国文化与世界多元文明的交融时刻&#xff0c;在影视与美酒的碰撞瞬间&#xff0c;共同擘画“美美与共&#xff0c;天下大同”的文明图景。 9月19-20日&#xff0c;以“多彩文明荣耀光影…

天府新区直播产业基地即将竣工,记者带你提前探访天府蜂巢成都直播产业基地

位于天府新区的成都直播产业基地即将竣工&#xff0c;这势必引领成都直播行业地标新朝向&#xff0c;聚合城市发展向心力。记者带您提前探访成都天府蜂巢直播产业基地&#xff0c;一睹其风采。 强强联手 资源整合 成都天府蜂巢直播产业基地是由以数字影像文创等产业集群为基础…

建议收藏《Verilog代码规范笔记_华为》(附下载)

华为verilog编程规范是坊间流传出来华为内部的资料&#xff0c;其贴合实际工作需要&#xff0c;是非常宝贵的资料&#xff0c;希望大家善存。至于其介绍&#xff0c;在此不再赘述&#xff0c;大家可看下图详细了解&#xff0c;感兴趣的可私信领取《Verilog代码规范笔记_华为》。…

【Java 基础篇】Java网络编程基础知识详解

网络编程是现代软件开发中不可或缺的一部分&#xff0c;它使我们能够在不同的计算机之间实现数据传输和通信。Java作为一种强大的编程语言&#xff0c;提供了丰富的网络编程库&#xff0c;使开发者能够轻松地创建网络应用程序。本文将介绍Java网络编程的基础知识&#xff0c;面…

构建可维护的大规模应用:框架架构的最佳实践

文章目录 框架架构的重要性最佳实践1. 模块化设计2. 遵循SOLID原则3. 使用设计模式4. 异常处理5. 代码注释和文档6. 测试 Spring Boot 和 Django&#xff1a;关键框架示例Spring Boot&#xff08;Java&#xff09;模块化设计&#xff1a;SOLID原则&#xff1a;设计模式&#xf…