目录
求a[i]到a[j]之间的的前缀和 ([ i , j ]的前缀和)[ i , j ]的前缀和 = sum[j] - sum[i-1]
sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + a[i][j]
求[x1][y1]到[x2][y2]之间的前缀和前缀和 = sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1
前缀和
前缀和分为一维前缀和、二位前缀和。以一维前缀和为例,其含义是数组中的第n项值是计算从下标0到下标n之间的累加和。
没读懂的话,可以直接看下面的一维前缀和和二维前缀和的画图和举例,这样更好的理解。
一维前缀和
例如:
定义一个a数组 和 一个sum数组,长度都为n+1;
a数组会给定数值,sum数组是前缀和数组,我们要通过a数组来计算sum数组。
根据上述,我们得出以下结论:
sum[n] = sum[n-1] + a[n]
求a[i]到a[j]之间的的前缀和 ([ i , j ]的前缀和)
[ i , j ]的前缀和 = sum[j] - sum[i-1]
二维前缀和
二维前缀和与以为前缀和类似。
即sum[i][j] 是从a[1][1]到a[i][j]这一方形内的总和。
sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + a[i][j]
求[x1][y1]到[x2][y2]之间的前缀和
前缀和 = sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1]