《吸血鬼:避世血族-絕唱》預購開啟 全新預告發布
阿新 • • 發佈:2022-04-08
差分
(一)一維差分
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陣列