首页 > 其他分享 >差分笔记

差分笔记

时间:2024-10-16 16:45:40浏览次数:1  
标签:int ...... 笔记 插入 差分 数组 +......+

差分笔记

差分可看作前缀和的逆运算

对于一个数组a[n]有:

a[0] a[1] a[2] a[3] ......a[n-2] a[n-1]

构造一个差分数组b[n]使得其中每一项都为数组a每项的差:

b[0]=a[0]

b[1]=a[1]-a[0]

......

b[n-2]=a[n-2]-a[n-3]
b[n-1]=a[n-1]-a[n-2]

不难看出b的前缀和为a中的每一项

a[n]=b[0]+b[1]+b[2]+......+b[n]

应用:一维差分

若想对a中 a[l]~a[r] 之间的每个数都加上c

则可以做以下操作:

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

这样的话:

a[l]=b[0]+b[1]+......+b[l-1]+b[l]+c=a[l]+c
a[l+1]+c=b[0]+b[1]+......+b[l-1]+b[l]+c+b[l+1]
......
a[r]+c=b[0]+b[1]+......+b[l]+c......+b[r-1]+b[r]
a[r+1]=b[0]+b[1]+......+b[l]+c......+b[r-1]+b[r]+b[r+1]-c

差分的非朴素构造:

对于一个一维数组,可以通过上面的简单构造b数组来实现

若为非一维数组则可以如下方法进行构造:以二维数组为例

将数组a[i] [j] 假设为全0数组,则b[i] [j]也为全0

这样对a[i] [j]中的每一项之间进行插入操作

b[i][j]+=c  //将ij矩形内的数加上常数c
b[i-1][j]-=c
b[i][j-1]-=c//减去(i-1,j) (i,j-1)矩形内增加的常数c
b[i-1][j-1]+=c//(i-1,j-1)//矩形内的数做过+c—c—c的操作,需要再次—c恢复到初始状态

将a[i] [j] 的每个数之间插入a[i] [j]的值即为b[i] [j]的值

例如在a[0] [0]与a[1] [0]之间插入a[1] [0]的值(在假设a数组为全0的情况下)

应用:二维差分

在a[i] [j] ~ a[l] [r]区间内的所有数加上常数c

首先对a数组进行插入值的初始化:

void insert (int i,int j,int l,int r,int c){//i>l;j>r
	b[i][j]+=c;
	b[i-1][j]-=c;
	b[i][j-1]-=c;
	b[i-1][j+1]+=c;
}//定义插入函数

//假定a数组为a[m][n]

for (int u=0;u<m;u++)
	for (int v=0;v<n;v++)
		intsert (u,v,u,v,a[u][v]);//对b数组初始化

再对a数组间的指定段进行插入操作

则可得到答案

标签:int,......,笔记,插入,差分,数组,+......+
From: https://www.cnblogs.com/dianman/p/18470273

相关文章

  • 关于Gmap.Net在WPF中的运用笔记(二)地图标注及几种图形的绘制
    通过第一篇,我们已经成功的加载了高德地图:https://www.cnblogs.com/zhouxiao123/p/18469933现在,我们来往地图上加点东西。Gmap.Net中,提供了标注类GmapMarker,通过创建标注,在将其添加到地图上,可以实现在地图上标点的功能。准备一张地图标注图,推荐去阿里矢量图库选取,有不少免费的......
  • 线性基笔记
    线性基是一种在异或操作上有很大用处的数据结构。可以求异或最值,区间异或最值的问题可以用来水各种题线性基的定义1.线性基能相互异或得到原集合的所有相互异或得到的值。2.线性基是满足性质1的最小的集合3.线性基没有异或和为0的子集。线性基的插入二进制下拆分数x,从高位......
  • 关于Gmap.Net在WPF中的运用笔记(一)初步加载高德地图
    一、前言最近公司需要开发一个车辆在途轨迹追踪的软件,结合现有系统和技术体系,最终敲定使用WPF+Gmap.Net来实现,这里将一些坑踩一下,做个笔记记录一下。二、项目搭建本项目基于.Net6.0+Gmap.Net.Core+Gmap.Net.WinPresentation,前面是用到的框架版本,后面则是需要用到的地图包,可通......
  • FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
    ​继音视频播放器ExoPlayer之后,谷歌又推出了音视频转换器Transformer,要在音视频加工领域施展拳脚。根据Android开发者官网介绍:JetpackMedia3是Android媒体库的新家,可让App呈现丰富的视听体验。Media3提供了一个简单的架构,能够基于设备功能开展自定义与可靠性优化,可以解决媒体部分......
  • 读书笔记《稀缺-我们是如何陷入贫穷与忙碌的》2023-6-21
    读书笔记《稀缺-我们是如何陷入贫穷与忙碌的》2023-6-21基本信息书名:《稀缺-我们是如何陷入贫穷与忙碌的》作者:[美]塞德希尔·穆来纳森(SendhilMullainathan)[美]埃尔德·莎菲尔(EldarShafir)​​​​译者:魏薇龙志勇出版社:浙江教育出版社.湛庐出版时间:2022年10月......
  • Caffeine学习笔记
    作者:京东工业孙磊一、认识Caffeine1、Caffeine是什么?Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库,也是SpringBoot内置的本地缓存实现。2、Caffeine提供了灵活的构造器去创建一个拥有下列特性的缓存:•自动加载条目到缓存中,可选异步方式•可以基于大小剔除......
  • 读书笔记《PPT演讲力》大树模型
    作者把PPT演讲比作一棵大树,树的每一部分对应着PPT演讲的一个技巧。根据这个大树模型,是否有联想到自己过往的演讲经历?演讲是否都达到了大树模型中说的效果?根据这个思维导图,结合自己的经历,试着总结3句关于自己的演讲经历的话,可以是演讲成功总结、演讲没达到的效果的总结、演......
  • spring上 -基于注解配置bean,动态代理,AOP笔记
     用的是jdk8,spring框架里jar包的下载可以自己搜到注解用到的jar包。  60,注解配置Bean快速入门 基本介绍 代码结构: UserDao.javapackagecom.hspedu.spring.component;importorg.springframework.stereotype.Repository;/**使用@Repository标识该......
  • bootloader学习笔记-从零开发bootloader(4)
    概要Flash区域划分,从不同的区域启动用户程序,实现覆写代码的功能。Flash区域划分我们的Flash是从0x08000000开始的,具体能用的大小需要查看芯片手册,例如,我的GD32F303RC芯片,flash可用的区域为256KB,内存可用大小为48KB。256KB也就是262144字节的大小,转换成16进制为0x40000,也......
  • CF1672F 做题笔记
    CF1672F1CF1672F2考虑给定\(b\)算它的最小操作次数,我们将\(a_i\)向\(b_i\)连一条边,每个环需要大小减\(1\)次操作次数,所以求这张图的最大简单环划分,显然每个环中不会有相同元素,否则可以分裂成\(2\)个小环更优。F1需要构造使最小次数最大的\(b\),那么就是要最小化最大......