P3397 地毯
考点
二维差分。
思路分析
暴力模拟会超时。
一维差分的思路:对数组 a 构造差分数组 b,其中 b[i] = a[i] - a[i-1]。对区间 [l, r] 加上 c 时,只需 b[l] += c、b[r+1] -= c,最后前缀和还原。
对于二维,在 (x1, y1) 到 (x2, y2) 矩形区域加 1,差分操作是四个点:
1 | d[x1][y1] += 1 |
最后对每行做前缀和即可得到最终的矩阵。
代码实现
1 | for (int l = 1; l <= n; l++) { |
小结
- 差分的核心思想:区间修改转化为端点操作,避免暴力
- 二维差分可以拆成四个单点修改,再前缀和还原
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Alignm-ent!
