一维
1.单点更新+区间查询 [l,r]区间的和
void add(int pos,int x){
 for(int i=pos;i<=n;i+=lowbit(i))a[i]+=x;
}
int Q(int pos){
 int sum=0;
 for(int i=pos;i;i-=lowbit(i))sum+=a[i];
 return sum;
}
2.区间修改+单点查询
[l,r]增加x 
维护差分数组d 查询a[i]
add(l,x),add(r+1,x);
3.区间修改+区间查询
[l.r]增加x
sum[i]=S_a[j]S_d[k]
sum[i]=(i+1)S_d[j]-S_d[j]*j
维护2个数组
sum1[i]=d[i],sum2[i]=d[i]*i
void add(int pos,int x){
 for(int i=pos;i<=n;i+=lowbit(i))
 sum1[i]+=x,sum2[i]+=x*pos;
}
void Q(int pos){
 int sum=0;
 for(int i=pos;i;i-=lowbit(i))
 sum+=(pos+1)*sum1[i]-sum2[i];
 return sum;
}
add(l,x),add(r+1,x);
二维
1.单点更新+区间查询
(子矩阵的和)
void add(int x,int y,int x){
 for(int i=x;i<=n;i+=lowbit(i))
 for(int j=y;j<=m;j+=lowbit(j))
 mat[i][j]+=x;
}
int Q(int x,int y){
 int sum=0;
 for(int i=x;i;i-=lowbit(i))
 for(int j=y;j;j-=lowbit(j))
 sum+=mat[i][j];
 return sum;
}
2.区间修改+单点查询
维护二维差分数组d[i][j],sum(d[i][j])=a[i][j];
void add(int x,int y,int x){
 for(int i=x;i<=n;i+=lowbit(i))
 for(int j=y;j<=m;j+=lowbit(j))
 d[i][j]+=x;
}
int Q(int x,int y){
 int res=0;
 for(int i=x;i;i-=lowbit(i))
 for(int j=y;j;j-=lowbit(j))
 res+=d[i][j];
}
add(x1,y1,x),add(x2+1,y1,-x),add(x1,y2+1,-x),add(x2+1,y2+1,x);
3.区间查询+区间修改
[1,x][1,y]子矩阵的和
sum[x][y]=(x+1)*(y+1)*S_d[i][j]-(y+1)*S_ d[i][j]*i-(x+1)*S_d[i][j]*j+S_d[i][j]*i*j;
维护 d1=d[i][j] d2=d[i][j]*i d3=d[i][j]*j d4=d[i][j]*i*j;
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))
 d1[i][j]+=val,d2[i][j]+=x*val,d3[i][j]+=y*val,d4[i][j]+=val*x*y;
}
int Q(int x,int y){
 int sum=0;
 for(int i=x;i;i-=lowbit(i))
 for(itn j=y;j;j-=lowbit(j))
 sum+=d1[i][j]*(x+1)*(y+1)-d2[i][j]*(y+1)-d3[i][j]*(x+1)+d4[i][j]*x*y;
 return sum;
}
add(x1,y1,x),add(x2+1,y1,-x),add(x1,y2+1,-x),add(x2+1,y2+1,x);