ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于区间操作查找(前缀和与差分)

2022-05-23 12:01:58  阅读:133  来源: 互联网

标签:前缀 元素 差分 x2 查找 数组 区间


今天学了前缀和和差分,为了避免我把它忘掉,我还是浅浅的记录一下吧

首先需要知道什么是前缀和与差分:

 

 前缀和就是数组中某元素之前(包括此元素)的所有元素的和

设b[]为前缀和数组,a[]是原数组。

 

对于一维数组而言,某个元素的前缀和就是从这个数组的第0个元素到这个元素的所有元素之和。

 

即:

那么就可以对区间求和产生更深刻的理解:

对于求出一个区间[l,r]的所有元素之和,我们就可以将首元素的前缀和与末元素的前缀合相减。

代码如下:

 

 

 而对于二维数组来说,每个元素的前缀和b[x][y]就是从a[0][0]到a[x][y]之间所有元素的和

比如b[3][1],就可以如下图的方法表示:

 

而如果我想给一个区间求和,就直接表示为:

即:

 

那我要是想给一个区间求和,就可以表示为:

     

 

 

 

 

 

 

 

代码如下:

 

 

 

关于差分,就是将当前元素与前一个元素相减。

比如给定一个数组a[n]={1,3,7,5,2},他的差分数组就是d[n]={1,2,4,-2,-3}

他的应用有很多,比如:给定一个序列,m次访问,每次输入两个一维坐x1,x2,并输入一个数c,代表这个数列从第x1个数到第x2个数之间的元素都加c,最后输出最新的序列。

对于这种题,先求出这个序列的差分数组d,每次询问让[L,R]+V转化为d[L]+V,d[R+1]-V ,最后再将新数组求一次前缀和即可。

 

 对于二维差分

 现在我要在左上角是 (x1,y1),右下角是 (x2,y2) 的矩形区间每个值都 +p

 那如果开始位置+p,那根据前缀和的性质,那么它影响的就是整个黄色部分(所有的求和都增加了),多影响了两个蓝色部分。所以在两个蓝色部分 -p 消除 +p 的影响,而两个蓝色部分重叠的绿色部分多了个 -p 的影响,所以绿色部分 +p 消除影响

 

 

 

 代码如下:

 

标签:前缀,元素,差分,x2,查找,数组,区间
来源: https://www.cnblogs.com/zch061023/p/16300683.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有