当前位置: 首页 > news >正文

【算法】差分

作者:指针不指南吗
专栏:算法篇

🐾合理规划时间与精力🐾

1.什么是差分?

与前缀和是反函数

原数组a

a1 , a2 , a3 , a4 , a5 , a6 , a7

构造数组b

a1=b1;

a2=b1+b2;

a3=b1+b2+b3;

ai=b1+b2+b3+…+bi;

构造一个b数组使得,他的前缀和是 a;

则b就是a的差分。


2.怎么求差分?

差分b , 前缀和 a;

  • 第一种
for(int i=1;i<=n;i++){cin>>a[i];b[i]=a[i]-a[i-1];
}
  • 第二种 利用函数,在问题具体操作时保持一致
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]);  //原来 b中都是0,现在插上
}

3.差分有什么用

对一段区间 [ l , r ] 的每个数加上 c,每个数多少

差分 b[ l ] + = c ,则 a[ l ~ n ] 全部都加上 c ,因为a[l]=...+b[l] ,a[l+1]=...+b[l]+b[l+1]

但是注意 r 之后的元素也都加上 c 了,这个不是我们想要的,所以打个补丁 ,令 b[ r + 1 ] - = c ;

优点是:时间复杂度为线性的

#include<iostream>
using namespace std;const int N=100010;
int a[N],b[N];int n,m; //n 数组元素个数;m 表示操作次数void insert(int l,int r,int c){b[l]+=c;   //对差分+cb[r+1]-=c;  //补丁
}int main(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];insert(i,i,a[i]);  //差分b 数组}while(m--){int l,r,c;        //对差分 b 操作cin>>l>>r>>c;    insert(l,r,c);   //对区间进行元素进行操作}for(int i=1;i<=n;i++){    //求出原数组即前缀和aa[i]=a[i-1]+b[i];cout<<a[i]<<' ';}return 0;
} 

4.进阶: 二维差分

在这里插入图片描述

黄色部分(x1,y1),(x2,y2)内的每个数加上 c

黄色 + c = (红色顶点+c) - (绿色顶点 - c ) - ( 粉色顶点 - c ) + ( 混合 色顶点)

差分处理 :

b [ x1 ] [ y1 ] + = c ;

b [ x1 ] [ y2 - 1 ] - = c ;

b [ x2 ] [ y1 - 1 ] - = c ;

b [ x2 - 1 ] [ y2 - 1 ] + = c ;


  • 代码实现
#include <iostream>using namespace std;const int N = 1010;int n, m, q;
int a[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()
{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;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];printf("%d ", b[i][j]);}puts(" ");}return 0;
}

Alt

相关文章:

【算法】差分

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;合理规划时间与精力&#x1f43e; 1.什么是差分&#xff1f; 与前缀和是反函数 原数组a a1 , a2 , a3 , a4 , a5 , a6 , a7 构造数组b a1b1; a2b1b2; a3b1b2b3; … aib1b2b3…bi; 构造一个b数组使得&#…...

【LeetCode】剑指 Offer(1)

目录 写在前面&#xff1a; 题目1&#xff1a;剑指 Offer 03. 数组中重复的数字 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目2&#xff1a;剑指 Offer 06. 从…...

linux rancher 清理docker容器磁盘空间

目录说明 /var/lib/docker/containers&#xff1a; 是 Docker 在 Linux 系统上默认存储容器信息的目录。在该目录下&#xff0c;每个运行的 Docker 容器都有一个单独的目录&#xff0c;以容器 ID 命名&#xff0c;其中包含有关该容器的元数据和日志文件。 具体来说&#xff0…...

移动端兼容性问题集锦

前言 去年主要工作就是混合开发&#xff0c;写app内嵌的h5。在开发期间多多少少遇到些兼容性问题&#xff0c;最近工作比较清闲&#xff0c;整理下方便以后查阅&#xff0c;也希望能帮助到一些同学。 并且本文会持续补充内容&#xff0c;欢迎关注我&#xff0c;另外我会更新一…...

【Spark分布式内存计算框架——Spark SQL】4. DataFrame(上)

3.1 DataFrame是什么 在Spark中&#xff0c;DataFrame是一种以RDD为基础的分布式数据集&#xff0c;类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于&#xff0c;前者带有schema元信息&#xff0c;即DataFrame所表示的二维表数据集的每一列都带有名称和类型。 使…...

GPS通信

目录 一、GPS启动的方式 二、GPS经纬度坐标转换 三、GPS定位和网络定位 四、3D定位和2D 定位 五、同步GPS时间到本地时间 六、卫星分布对GPS performance有很大影响吗 一、GPS启动的方式 热启动&#xff1a;指在上次关机的地方没有过多移动过&#xff0c;且距离上次定位…...

Java高频面试题,ReentrantLock 是如何实现锁公平和非公平性的?

我先解释一下个公平和非公平的概念。 公平&#xff0c;指的是竞争锁资源的线程&#xff0c;严格按照请求顺序来分配锁。 非公平&#xff0c;表示竞争锁资源的线程&#xff0c;允许插队来抢占锁资源。 ReentrantLock 默认采用了非公平锁的策略来实现锁的竞争逻辑。 其次&…...

「JVM 原理使用」 实际开发中的应用

Class 文件格式、执行引擎主要以 Class 文件描述了存储格式、类何时加载、如何连接、VM 如何执行字节码指令&#xff0c;这些动作基本都是 JVM 直接控制&#xff0c;用户代码无法干预和改变&#xff1b; 用户可以干预的只有字节码生成、类加载器两部分&#xff0c;而这两部分的…...

最最普通程序员,如何利用工资攒够彩礼,成为人生赢家

今天我们不讲如何提升你的专业技能去涨工资&#xff0c;不讲面试技巧如何跳槽涨工资&#xff0c;不讲如何干兼职赚人生第一桶金&#xff0c;就讲一个最最普通的程序员&#xff0c;如何在工作几年后&#xff0c;可以攒够彩礼钱&#xff0c;婚礼酒席钱&#xff0c;在自己人生大事…...

脏话越多,代码越好!

你在读开源代码的时候有没有遇到过这种注释?What the fuck &#xff1f;Dude&#xff0c;WTFFuck this !我遇到过&#xff0c;每次都忍不住笑&#xff0c;心想老外可真是性情中人&#xff0c;遇到不爽的地方就开骂&#xff0c;还直接写到注释中&#xff0c;甚至代码中。Bob大叔…...

【Node.js】模块化

模块化模块化的基本概念模块化规范Node.js中模块化分类模块作用域向外共享模块作用域的成员Node.js中的模块化规范模块化的基本概念 指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程对于整个系统来说&#xff0c;模块是可组合&#xff0c;分解和更换…...

训练一个中文gpt2模型

前言 这是我的github上的一个介绍&#xff0c;关于如何训练中文版本的gpt2的。链接为: https://github.com/yuanzhoulvpi2017/zero_nlp 介绍 本文&#xff0c;将介绍如何使用中文语料&#xff0c;训练一个gpt2可以使用你自己的数据训练&#xff0c;用来&#xff1a;写新闻、…...

python文件头规范和函数注释自动生成(pycharm)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Time : ${DATE} ${TIME} Author : xxx Email : xxxxxx.comFileName: ${NAME}.py Software: ${PRODUCT_NAME} """if __name__ __main__:print(Python)pycharm python文件头规范和函数注…...

Fluent Python 笔记 第 17 章 使用 future 处理并发

future 指一种对象&#xff0c;表示异步执行的操作。这个概念的作用很大&#xff0c;是 concurrent.futures 模块和 asyncio 包(第 18 章讨论)的基础。 17.1 示例:网络下载的三种风格 17.1.1 依序下载的脚本 17.1.2 使用 concurrent.futures 模块下载 from concurrent impo…...

Android进阶之路 - StringUtils、NumberUtils 场景源码

忘记是在去年还是前年的时候遇到一个需要检测所传字符串是否为数字的场景&#xff0c;开始使用 NumberUtils.isNumber() 提示错误 &#xff0c;没有解决问题&#xff08;可能是因为依赖版本导致&#xff09;&#xff0c;最后使用的是StringUtils.isNumeric()&#xff0c;当时关…...

装备制造业数字化转型CRM系统解决方案(信息图)

一、制造企业面临的机遇与挑战 2021年12月28日&#xff0c;工业和信息化部等八部门联合对外发布《“十四五”智能制造发展规划》&#xff0c;明确提到“推进智能制造&#xff0c;要立足制造本质&#xff0c;紧扣智能特征&#xff0c;以工艺、装备为核心&#xff0c;以数据为基…...

CGAL 二维剖分

目录一、 2D Triangulations1、定义2 Representation2.1 The Set of Faces2.2 A Representation Based on Faces and Vertices3 Software Design4 Basic Triangulations4.1 Description遍历三角网顶点4.2 Implementation4.3 Geometric Traits4.4 Example of a Basic Triangulat…...

node.js+vue婚纱影楼摄影婚庆管理系统vscode项目

&#xff1a;减少管理婚庆工作人员的负担&#xff1b;管理人员可以随时浏览婚纱网站以便及时知道哪里需要修改和更进&#xff0c;同时还可以查看用户反馈给我们的信息&#xff0c;让管理员更加直观的了解客户的需求&#xff1b;该系统改变了以前手工记录的方式&#xff0c;使用…...

C语言 指针的新理解

16年写了很多 C 与 C 相关的文章&#xff0c;但是后面从事了 Android 开发&#xff0c;就全部删掉了&#xff0c;无意中发现了这篇由还存在草稿箱&#xff0c;索性就找回来吧&#xff0c;也是追忆当年学习的青葱岁月 1.指针就是一个存储了其他变量地址的变量。 指针存储的是整…...

【向每个应用View中增加子控件 Objective-C语言】

一、把刚才计算九宫格的思路再给大家过一遍 1.现在我们要计算九宫格坐标 1)先把每一个格子,每一个九宫格的大小,先确定了, 在这里先指定宽和高 CGFloat appW = 75; CGFloat appH = 90; 2)再去计算第一个格子的一些间距, 到上面的间距,marginTop = 30; 再计算出…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...