前缀和与差分
一维前缀和
void init()
{
for (int i = 1; i <= n; ++ i )
{
f[i] = f[i-1] + value[i-1];
}
}
int get(int l, int r)
{
return f[r] - f[l-1];
}
二维前缀和
void init()
{
for (int i = 1; i <= n; ++ i )
for (int j = 1; j <= m; ++ j )
{
f[i][j] = f[i-1][j] + f[i][j-1] - f[i-1][j-1] + value[i-1][j-1];
}
}
// y2 >= y1 && x2 >= x1
int get(int x1, int y1, int x2, int y2)
{
return f[x2][y2] - f[x1-1][y2] - f[x2][y1-1] + f[x1-1][y1-1];
}