前缀和
前缀和的作用主要体现在能快速求出一个数组中一段连续区间的和,比如像要求出[l, r]这一段区间的和,不需要再去每个数遍历一次,只需要用前缀和数组相减即可
一维前缀和核心操作
s[i] = s[i - 1] + a[i];
二维前缀和核心操作
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
需要注意构造前缀和数组时是可以直接在原数组上进行构造的,不需要s数组
差分
差分为前缀和的逆运算。差分的作用为能快速在一个数组中的一段连续区间加上某一个数C,不要再依次遍历,只需要对其差分数组进行操作即可。我们要考虑的是如果在原数组上进行加数操作映射到差分数组上我们应该进行什么样的操作要注意的是构造一个数组的差分数组时不需要单独初始化,可以先将原数组与其差分数组看为全零,然后当做将原数组上的每一个点加上原本的值即可,即进行n*m次差分数组的操作
一维差分核心操作
b[l] += c;
b[r + 1] -= c;
二维差分核心操作
b[x1][y1] += c;
b[x2 + 1][y1] -= c;
b[x1][y2 + 1] -= c;
b[x2 + 1][y2 + 1] += c;