#include <iostream>
using namespace std;
// *一维前缀和*
//
// 有数组 a[1], a[2], a[3] …… a[n]
// 则有前缀和数组 s[n] = a[1] + a[2] + a[3] + …… + a[n], 定义s[0] = 0
// 区间 [l, r] 的数据和为 s[r] - s[l-1]
// *二维前缀和*
//
// S[i, j] = 第i行j列格子左上部分所有元素的和
// 以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:
// S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]
//
// S[i, j] = S[i-1, j] + S[i, j-1] - S[i-1, j-1] + a[i, j]
const int N = 1010;
int a[N], s[N];
int A[N][N], S[N][N];
int main()
{
// 一维前缀和
for (int i = 1; i < N; i++)
{
s[i] = s[i - 1] + a[i];
}
// 二维前缀和
for (int i = 1; i < N; i++)
{
for (int j = 1; j < N; j++)
{
S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + A[i][j];
}
}
return 0;
}
一维前缀和、二维前缀和
最新推荐文章于 2024-10-05 19:23:25 发布