二维树状数组

本来是没有计划往二维上面学的,但是矩阵乘法用到了二维前缀和,所以记录一下模板 二维前缀和公式 getsum(x2,y2)-getsum(x2,y-1)-getsum(x-1,y2)+getsum(x-1,y-1);

单点修改,区间查询

void add(int x,int y,int v)
{
  while(x<=n)
  {
    int ty=y;
    while(ty<=n)
      tr[x][ty]+=v,ty+=lowbit(ty);
    x+=lowbit(x);
  }
}

int getsum(int x,int y)
{
  int sum=0;
  while(x)
  {
    int ty=y;
    while(ty)
    {
      sum+=tr[x][ty],ty-=lowbit(ty);
    }
    x-=lowbit(x);
  }
  return sum;
}