第一,为什么修改操作是这样的?
void add(int x,int y,int val)
{
for(int i=x;i<=n;i+=lowbit(i))
for(int j=y;j<=m;j+=lowbit(j))
{
tr[0][i][j]+=val;
tr[1][i][j]+=val*y;
tr[2][i][j]+=val*x;
tr[3][i][j]+=val*x*y;
}
}
我推出来的询问操作式子是:(s是差分数组)
∑i=1x∑j=1y [(xy+x+y+1)si,j−(x+1)j×si,j−(y+1)i×si,j+i×j×si,j]
那么修改时为什么用的是 val*x*y 、val*x 、val*y 而不是 val*i*j 、val*i 、val*j ?