题目
给定起始点坐标,终点坐标,输出两个坐标之间的前缀和:
a[4][3]表示如下
a[4][3]用a[x][j]老i表示。
s[4][3]表示如下
怎么求s[4][3]
我们只需要求a[i-1][j],a[i][j-1]的前缀和就可以了,如图(a-2)所示:
s[i][j-1]表示对应一列的前缀和 如图(a-3):
s[i-1][j]前缀和 表示为(a-4):
我们发现有一部分重合了,重合部分我用 红色表示:
我们把这一部分减去就可以了,重合的这部分又可以用求a[i-1][j-1]的前缀和得出,如图(a-5):
s[i-1][j-1]表示为如图(a-7):
然后就得到了s[i][j]的前缀和,如图(a-6):
根据这个思想,我们总结如下公式:
题目要求输入两个坐标,求这两个坐标的之间的前缀和:
我们可以先求出a(x2,y2)的前缀和,如图(b-1):
然后我们在减去多余的就行了,先减去a[x1-1][y2]的前缀和,如图(b-3):
再减去a[x2][y1-1]的前缀和,如图(b-4):
我们发现有一块减了两次,给减没了,如图(b-5):
再把这一块给加回来就可以了:
以上可以总结为公式: