二维前缀和
其实就是两步
第一步:计算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)