二維陣列字首和 差分 以及列舉所有矩形(子矩陣)

2022-06-08 05:03:07 字數 1069 閱讀 1773

就變成了上面的紅色部分。

那麼假設紅色部分左上角座標為(x1,y1)(x1,y1),右下角為(x2,y2)(x2,y2),設sum[x][y]sum[x][y]表示從(1,1)(1,1)加到(x,y)(x,y)的和,那麼紅色部分就是:

sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]sum[x2][y2]−sum[x2][y1−1]−sum[x1−1][y2]+sum[x1−1][y1−1]

那麼sum[x][y]sum[x][y]要怎麼求呢?

其實就是xx這一行到yy的字首和加上sum[x-1][y]sum[x−1][y]就ok啦~~

可以自己理解一下(應該很好理解吧)

然後呢,再用4個變數迴圈判斷座標,然後求最大值即可。

**如下:

#includeusing namespace std;

int n;

int a[130][130];//儲存題目中的矩陣

int sum[130][130];

int qz[130][130];//qz[i][j]指的是第i行到j的字首和

int main()

}int mx=-99999999;//儲存答案

for(int x1=1;x1<=n;x1++)}}

}cout/輸出

由二維差分陣列d得到更新的a矩陣**如下

#include

#include

#define maxn 10

int a[maxn][maxn],sum[maxn][maxn],d[maxn][maxn];

int main()

return 0;

}

地毯 二維差分和二維字首和

見 類似於一維差分,o 1 的時間複雜度。二維差分相關概念 均是搬運 當對乙個二維區間內的所有數做出全部加乙個數或者全部減乙個數的操作時,需要修改二維差分矩陣內的四個點。比如我想讓a x1 y1 和a x2 y2 兩對角頂點圍成的矩形區域內的所有點都加1,則我需要 讓a x1 y1 a x1 y2 ...

二維差分陣列和二維字首和的個人看法

一維差分陣列和字首和都挺熟悉的,做題在打cf的時候做到了乙個看別人用二維差分陣列求字首和的題,驚呆了,於是來補了下這方面的知識。在學習和理解二維的時候,我們拿一維來對比就行了,思想是類似的但是略有所不同。設乙個二維陣列a i j 那麼它的二維字首和即為從 i,j 到原點 0,0 所有數之和,或者說這...

字首和 二維字首和與差分的小總結

在了解二維字首和之前,我們首先需要了解一下什麼是字首和。如果我給你一串長度為n的數列a1,a2,a3.an,再給出m個詢問,每次詢問給出l,r兩個數,要求給出區間 l,r 裡的數的和,你會怎麼做,若是沒有了解過字首和的人看到這道題的想法可能是對於m次詢問,我每次都遍歷一遍它給的區間,計算出答案,這樣...