1. 程式人生 > 遊戲 >《吸血鬼:避世血族-絕唱》預購開啟 全新預告發布

《吸血鬼:避世血族-絕唱》預購開啟 全新預告發布

差分

(一)一維差分

1.目的

​ 將一維陣列中某一區間內的元素都加上(減去)一個數

2.實現

​ 將a[l~r]中的數都加上c,首先構建一個數組b,使得b陣列的字首和陣列為a陣列,那麼我們稱b陣列為a陣列的差分陣列,a陣列是b陣列的字首和

​ 那麼如果我們將b[l]+c,因為a陣列是b陣列的字首和,那麼a[l]以及之後的a陣列都會加上c,而我們只需要讓a[l~r]中的數加上c,因此我們只需要讓b[r+1]-c,那麼a[r+1]以及之後的a陣列都會減去c,因此我們將操作後的b陣列求字首和,就得到了我們所需要的a陣列

3.程式碼
//將a[l~r]中的數都加上c
void add(int l,int r); //也可用於構造b陣列
{
	b[l]+=c;
	b[r+1]-=c;
}

//之後對b求一維字首和即可求出a陣列

(二)二維差分

1.目的

​ 將二維陣列中某一子矩陣中的元素都加上(減去)一個數

2.實現
//給以(x1, y1)為左上角,(x2, y2)為右下角的子矩陣中的所有元素加上c
void add(int x1,int y1,int x2,int y2) //也可用於構造b陣列
{
    b[x1][y1]+=c;
    b[x1][y2+1]-=c;
    b[x2+1][y1]-=c;
    b[x2+1][y2+1]+=c;
}

//最後對b陣列求二維字首和即可求出a陣列