二维前缀和

其实就是两步

第一步:计算f(i,j)到起始点(默认为(1,1))前缀和

公式:f(i,j)=f(i-1,j)+f(i,j-1)-f(i-1,j-1)+a[i,j];

可以用图像来表示会更清楚

此时所有格子都是白色的

此时是(1,1)到(i,j-1)

此时是又加上了(1,1)到(i-1,j)

发现重复的是(1,1)到(i-1,j-1)这块

然后我们减去即可

此时就只需要加上最后的点a[i,j]即可

所以计算公式就是f(i,j)=f(i-1,j)+f(i,j-1)-f(i-1,j-1)+a[i,j];

第二步:调用计算出任意两点间围成矩形的值(从(x1,y1)到(x2,y2))

ans=f(x2​,y2​)−f(x2​,y1​−1)−f(x1​−1,y2​)+f(x1​−1,y1​−1)