本文讲解一、二维前缀和与差分的公式及使用。
一维前缀和:
一维前缀和公式为:b[i]=b[i-1]+a[i],其中,a为原数组,b为前缀和数组,这样可以算出在指定位置前所有数据之和(包含指定位置)。
一维区间和计算:
通过前缀和,我们可以快速计算区间和,比如要计算区间[l,r]种所有数据之和,就可以用公式:sum=b[r]-b[l-1],其中sum为结果,b为前缀和数组,这样就可以快速求出区间和。
一维差分:
首先我们要知道,差分和前缀和不论先后顺序,同时执行后数组仍为原数组,
一维差分的公式为:b[i]=a[i]-a[i-1],其中,b为差分数组,a为原数组。
一维差分的使用:
一维差分与前缀和搭配使用可以帮助我们快速为一个区间加上相同的数。比如,要将区间[l,r]中的数据同时加上k,就可以先算出差分数组b,在执行公式:b[l]+k,b[r+1]-k,再算前缀和,就可以得出结果。
二维前缀和:
二维前缀和公式为:b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j],其中,a为原数组,b为前缀和数组,这样就可以算出以指定位置为右下角,矩阵的左上角为左上角的子矩阵中所有数据之和:
二维子矩阵和计算:
通过前缀和,我们可以快速计算子矩阵和,比如要计算左上角坐标为(x1,y1),右下角坐标为(x2,y2)的子矩阵和,就可以用公式:sum=b[x2][y2]-b[x2][y1-1]-b[x1-1][y2]+b[x1-1][y1-1],其中sum为结果,b为前缀和数组,这样就可以快速求出子矩阵和。
二维差分:
二维差分的公式为:b[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1],其中,b为差分数组,a为原数组。
二维差分的使用:
二维差分与前缀和搭配使用可以帮助我们快速为一个子矩阵加上相同的数。比如要为左上角坐标为(x1,y1),右下角坐标为(x2,y2)的子矩阵里的数据同时加上k,就可以先算出差分数组b,在执行公式:b[x1][y1]+=k,b[x2+1][y1]-=k,b[x1][y2+1]-=k,b[x2+1][y2+1]+=k,再算前缀和,就可以得出结果。
感谢观看!