当前位置: 首页 > 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; 再计算出…...

【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

前言&#xff1a;本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载的示例&#xff1a;表决器&#xff08;三人表决器&#xff09;。 功能特性&#xff1a; 采用 Xilinx Artix-7 XC7A35T芯片 配置方式&#xff1a;USB-JTAG/SPI Flash 高达100MHz 的内部…...

【安全等保】安全等保二级和三级哪个高?哪个费用更高?

等保政策已经严格落地执行了&#xff0c;各大企业纷纷接到了过等保的通知&#xff0c;但有的估计是第一次听到等保&#xff0c;对于等保相关政策都是非常蒙圈的。这不不少企业相关负责人在问&#xff0c;安全等保二级和三级哪个高&#xff1f;哪个费用更高&#xff1f;这里我们…...

C++ STL学习记录(v1)

C STL学习记录一. 什么是STL1.1 STL的诞生1.2 STL基本概念1.3 STL的六大组件1.4 STL中的容器、算法、迭代器1.5 容器、算法、迭代器实践一. 什么是STL 1.1 STL的诞生 STL建立的目的就是为了解决软件界复用性的需求。C的面向对象和泛型编程思想&#xff0c;目的就是为了复用性的…...

开发中遇到的问题

1.当写一个导出功能时&#xff0c;因为编码写URL地址&参数的时候&#xff0c;用反转字符串的时候换行了&#xff0c;造成地址拼接不成&#xff0c;一直报错&#xff0c;后来发现是编码格式造成的&#xff0c;已解决。 解决方案&#xff1a;不换行或者用 “”拼接 2.当本地…...

Javascript笔记

数据类型 基本类型(primitive value) 简单的数据段&#xff0c;包括 Undefined, Null, Boolean, Number, String初始化只使用2原始字面量形式&#xff0c;如果使用new则会创建Object无法加入新的属性 引用类型(reference value) 可能由多个值构成的对象判断类型 typeofinstanc…...

Elasticsearch(ES)配置及优化

在Elasticsearch中&#xff0c;索引的大小和存储能力取决于多个因素&#xff0c;包括文档大小、索引的分片数、硬件规格、查询负载和其他因素。索引和分片配置&#xff1a;索引和分片的数量和配置会对查询并发性能产生影响。如果索引和分片的数量太少&#xff0c;可能会导致查询…...

一文看懂Java语言与Java生态圈

Java语言与Java生态圈 1、Oracle JDK与Open JDK之间的关系 Oracle JDK Java最早是由SUN公司发明&#xff0c;Oracle JDK之前叫SUN JDK&#xff0c;显而易见&#xff0c;这是在2009年Oracle收购SUN公司之前&#xff0c;收购之后被名为Oracle JDK&#xff0c;实际上&#xff0…...

GitHub 上有什么嵌入式方面的项目?

原文直达,喜欢就点个赞吧&#xff01; GitHub 上有什么嵌入式方面的项目&#xff1f; - CodeAllen的回答 - 知乎 https://www.zhihu.com/question/27835930/answer/2871624679 前言 对于GitHub&#xff0c;可能做互联网开发的同学会更加熟悉&#xff0c;尤其是前端&#xff0…...

【C语言进阶】结构体、位段、枚举和联合

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…...

markdown和latex常用部分参考@注脚@链接跳转@csdn

文章目录refmarkdown和latex常用部分参考typora文档基础语法扩展语法链接内联链接的方式将链接提取出来链接示例typora的支持LinksInline LinksInternal Links&#x1f388;Reference LinksURLs文章内部跳转(Heading IDs)&#x1f388;My Great Heading注脚(Footnotes)&#x1…...