前缀和可以在O(n)时间统计和修改,在O(1)时间内查询统计任意区间之和;
差分可看作前缀和的“逆运算”,可在O(1)时间操作任意区间;
一.前缀和
1.一维前缀和
预处理O(n):s[i]统计a[1…i]的值;
查询O(1): s[r]-s[l-1];
2.二维前缀和
例题
初始化O(nm):
for (ll i = 0; i < n; i++) {
ll x, y, t;
cin >> x >> y >> t;
sum[++x][++y] += t;
w = max(w,x), h = max(h, y);
}
for (ll i = 1; i <= w; i++) {
for (ll j = 1; j <= h; j++) {
sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + sum[i][j];
}
}
<