二维差分

其实二维差分和一维差分一样,就是更新时一维是更新两个点,二维的更新四个点,然后询问某一个点的值都是前缀和。

++b[x1][y1];
++b[x2][y2];
--b[x1][y2];
--b[x2][y1];

这样子我就可以更新以(x1,y1)和(x2-1,y2-1)为两个对顶角的矩形,

然后最后要求前缀和

for(int i=0;i<n;++i){
        for(int j=0;j<n-1;++j){
            b[i][j+1]+=b[i][j];
        }
    }
    
    for(int i=0;i<n;++i){
        for(int j=0;j<n-1;++j){
            b[j+1][i]+=b[j][i];
        }
    }

先求行的前缀和,再求列的前缀和

posted @ 2019-08-12 14:24  小布鞋  阅读(202)  评论(0编辑  收藏  举报