Acwing 796. 二维前缀和 模板

115 阅读1分钟

796. 子矩阵的和 - AcWing题库

题目

给定起始点坐标,终点坐标,输出两个坐标之间的前缀和:

image.png

image.png

image.png

a[4][3]表示如下

a[4][3]用a[x][j]老i表示。

image.png

s[4][3]表示如下

image.png

怎么求s[4][3]

我们只需要求a[i-1][j],a[i][j-1]的前缀和就可以了,如图(a-2)所示:

image.png s[i][j-1]表示对应一列的前缀和 如图(a-3):

image.png s[i-1][j]前缀和 表示为(a-4):

image.png 我们发现有一部分重合了,重合部分我用 红色表示:

image.png

我们把这一部分减去就可以了,重合的这部分又可以用求a[i-1][j-1]的前缀和得出,如图(a-5):

image.png

s[i-1][j-1]表示为如图(a-7):

image.png

然后就得到了s[i][j]的前缀和,如图(a-6):

image.png

根据这个思想,我们总结如下公式:

image.png

题目要求输入两个坐标,求这两个坐标的之间的前缀和:

image.png

我们可以先求出a(x2,y2)的前缀和,如图(b-1):

image.png

然后我们在减去多余的就行了,先减去a[x1-1][y2]的前缀和,如图(b-3):

image.png

再减去a[x2][y1-1]的前缀和,如图(b-4):

image.png

我们发现有一块减了两次,给减没了,如图(b-5):

image.png

再把这一块给加回来就可以了:

image.png 以上可以总结为公式:

image.png

code

image.png