1、一维前缀和
给出n个整数a[1],a[2],...,a[n],q次查询,每次查询给出两个整数l,r,要求输出a[l]+...+a[r].
sum[i]=sum[i-1]+a[i];
sum[r-l]=sum[r]-sum[l-1];
sum[i]为前i项和。
2、二维前缀和
输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标对于每个询问输出子矩阵的和。
3 4
1 2 3 10
4 5 6 11
7 8 9 12
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
ans=sum[x2][y2]-sum[x1-1][y1]-sum[x1][y1-1]+sum[x1][y1];
3、一维差分
d[i]=a[i]-a[i-1]
l,r,w;
d[l]+w;
d[r+1]-w;
4、二维差分
a[][]
1 2 4 3
5 1 2 4
6 3 5 9
d[][];
d[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1];
x1,y1,x2,y2; +w
d[x1][y1]+=w;
d[x2+1][y1]-=w;
d[x1][y2+1]-=w;
d[x2+1][y2+1]+=w;