二维树状数组
单点修改,子矩阵查询。
void add(int x,int y,int v){
for(;x<=n;x+=x&-x)
for(int i=y;i<=m;i+=i&-i)
c[x][i]+=v;//c[x][i]=max/min(c[x][i],v);
}
int sum(int x,int y){
int res=0;
for(;x;x-=x&-x)
for(int i=y;i;i-=i&-i)
res+=c[x][i];//res=max/min(res,c[x][i]);
return res;
}
发现只是把一重循环改成两重就好。
至于原因,分析难,反正背下来就好。