前缀和&差分

前缀和

一维前缀和

s[i] = a[1] + a[2] + ... a[i]

a[l] + ... + a[r] = s[r] - s[l - 1]

二维前缀和

s[i, j] = 第i行j列格子左上部分所有元素的和

以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:

s[x2, y2] - s[x1 - 1, y2] - s[x2, y1 - 1] + s[x1 - 1, y1 - 1]

差分

一维差分

给区间[l, r]中的每个数加上c:b[l] += c, b[r + 1] -= c

二维差分

给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c:

s[x1, y1] += c, s[x2 + 1, y1] -= c, s[x1, y2 + 1] -= c, s[x2 + 1, y2 + 1] += c

posted @ 2024-09-23 00:25  DomiSun  阅读(7)  评论(0编辑  收藏  举报
/* 点击爆炸效果*/