差分:🎈 类似于数学中的求导和积分,差分可以看成前缀和的逆运算对于一个给定的数列a,其中a[1],a[2]…a[n]作为前缀和。它的差分数组中 b 中 b[ i ] 表示从第 i - 1个元素到第 i 个元素的差值。即b[ i ] = a[ i ] - s[ i - 1 ]; 一维差分数组的构造也很简单,即a[1] = b[1], ...
区间修改: b[l]+=c;//将序列中[l, r]之间的每个数都加上cb[r+1]-=c;//复原其余数组 单点求和:(对差分数组做前缀和运算) for(inti=1;i<=n;i++){a[i]=b[i]+a[i-1];//前缀和运算cout<<a[i];}//求a[i] 二维差分: 构建二维数组: for(inti=1;i<=n;i++){for(intj=1;j<=m;...
m;cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)s[i]=s[i-1]+a[i];//前缀和的初始化,s[0]处理边界问题while(m--){int l,r;cin>>l>>r;cout<<s[r]-s[l-1]<<endl;//区间和的计算}return 0;}...
差分是一种常用的算法思想,它主要用于对一个数组进行多次修改操作,然后查询某个位置的值或者整个数组的状态。 具体地说,差分就是利用前缀和(或后缀和)数组来维护一个数组的变化情况。我们可以将待修改的数组中若干个位置的值进行修改,然后通过差分数组对这些修改进行记录。最终,我们只需根据差分数组计算出原数组的值...
前缀和差分是一对逆运算 1.一维前缀和 有一个长度为n的数组an:a1,a2…an; 对于前缀和:Si= a1+a2+…+ai 如何求Si,S[i] = s[i-1]+a[i] 前缀和可以快速求出原数组里面一段数的和。比如求一段区间[l,r],如果按照原来的做法,需要循环一遍,O(n),有前缀和的算法: ...
一、前缀和与差分的基本概念 1.什么是前缀和 现有一个长度为n的数组a[0]~a[n-1],它的前缀和sum[i]=a[0]~a[i]的加和,如:sum[0]=a[0],sum[1]=a[0]+a[1],sum[2]=a[0]+a[1]+a[2],等等以此类推。利用递推,求出所有的前缀和的时间复杂度仅为O(n),小于用暴力枚举的时间复杂度O(n...
1. 前缀和 1.1 基本思想 1.2 代码实现 2. 二维前缀和 2.1 基本思想 2.2 代码实现 3. 差分 3.1 基本思想 3.2 代码实现 4. 二维差分 4.1 基本思想 4.2 代码实现 5. 双指针 5.1 基本思想 5.2 代码实现 1. 前缀和 1.1 基本思想 原数组: a1,a2,a3...an, 称Si=a1+a2+a3...ai 为前缀和 求前缀和...
差分 类似于数学中的求导和积分,差分可以看成前缀和的逆运算。 差分数组:(差分的数组下标元素也是从1开始,方便统一计算) 首先给定一个原数组a:a[1], a[2], a[3],,, a[n]; 然后我们构造一个数组b : b[1] ,b[2] , b[3],,, b[i]; 使得a[i]...
差分算法是前缀和算法的逆过程,可以通过已知的区间和求解出原数组中的每个元素。差分数组是指原数组中相邻元素之间的差值所构成的数组。例如,对于数组nums=[1,2,3,4,5],它的差分数组diff=[1,1,1,1,1],元素diff[i]表示nums[i]-nums[i-1]。差分数组求解原数组的过程也可以称之为恢复原数组的过程。差分算...
01_差分 difference差分与前缀和互为逆运算(注: 下标从1开始) (1)一维差分: (区间修改)A[1], A[2], … , A[n](前缀和数组),构造 B[1], B[2], … , B[n](差分数组), 使得 A[i] = B[1] + B[2] + … + B[i]: B[1] = A[1], B[2] = A[2] - A[1], B[3] = A[...