作业介绍

二维差分

定义

类比一维差分的定义,二维差分的定义如下

bi,j=ai,jai1,jai,j1+ai1,j1b_{i,j}=a_{i,j}-a_{i-1,j}-a_{i,j-1}+a_{i-1,j-1}

性质类似于一维差分,对 bb 做二维前缀和可以直接得到原数组 aa 的值。

子矩阵的修改

当我们需要在以 (x1,y1)(x_1,y_1) 为左上角,(x2,y2)(x_2,y_2) 为右下角形成的子矩阵全部加 cc 可以通过如下式子完成。

  • bx1,y1+cb_{x_1,y_1}+c
  • bx1,y2+1cb_{x_1,y_2+1}-c
  • bx2+1,y1cb_{x_2+1,y_1}-c
  • bx2+1,y2+1+cb_{x_2+1,y_2+1}+c

证明可以参考下图:

image

类比一维差分,执行 bl+cb_l+c 以后会给 alana_l\sim a_n 都加 cc

那么在二维当中。

  • bx1,y1+cb_{x_1,y_1}+c,会造成图中 绿 + 蓝 + 橙 + 黄 这四部分都加 cc
  • bx1,y2+1cb_{x_1,y_2+1}-c,会造成图中 绿 + 蓝 这两部分都减 cc
  • bx2+1,y1cb_{x_2+1,y_1}-c,会造成图中 绿 + 橙 这两部分都减 cc
  • bx2+1,y2+1+cb_{x_2+1,y_2+1}+c,会造成图中 绿 这两部分都加 cc

最终通过一系列抵消操作,可以实现只给黄色区域全部加 cc

还原原数组

还原原数组就是对 bb 直接做二维前缀和。

执行 b[i][j] += b[i -1][j] + b[i][j - 1] - b[i - 1][j - 1]

或通过定义还原,在定义中

bi,j=ai,jai1,jai,j1+ai1,j1b_{i,j}=a_{i,j}-a_{i-1,j}-a_{i,j-1}+a_{i-1,j-1}

ai,j=ai1,j+ai,j1ai1,j1+bi,ja_{i,j}=a_{i-1,j}+a_{i,j-1}-a_{i-1,j-1}+b_{i,j}

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
4
开始时间
2026-3-13 0:00
截止时间
2034-3-13 23:59
可延期
24 小时