Monitor(矩形覆蓋 二維差分)

2021-09-19 08:30:01 字數 911 閱讀 8277

原題:

題意:

給出n個矩陣,q個查詢,問乙個矩陣是否被之前的矩陣完全覆蓋。

解析:

對於每個矩陣進行差分:

每個矩陣的左上角+1,右下角+1,另外兩個-1。那麼此時的二維字首和就表示某個點被覆蓋的次數了。(例如:黃色為0,紅色為1)

然後將每個有被覆蓋的點變成1,否則為0,此時再次做二維字首和,得到的就是一定區域內被覆蓋的點數,容斥一下就可以得到每個矩形內的點數了。查詢內點數等於矩形面積就說明完全覆蓋。

#include

using

namespace std;

const

int maxn=

3e7+7;

int v[maxn]

;int n,m;

inlineid(

int x,

int y)

void

add(

int x,

int y,

int v)

intquery

(int x,

int y)

intmain()

for(

int i=

1;i<=n;i++)}

for(

int i=

1;i<=n;i++)}

for(

int i=

1;i<=n;i++)}

cin>>nn;

while

(nn--)}

return0;

}

HDU 6514 Monitor(二維差分)

給定乙個 n m 的矩陣。n m 1e7 p 次操作,每次可以在這個矩陣中覆蓋乙個矩形。q 次詢問,每次問乙個矩形區域中,是否所有的點都被覆蓋。修改的時候用二維差分,判斷的時候用二維字首和。增加矩形 x1,y1 x2,y2 時 dis id x1,y1 dis id x1,y2 1 dis id x...

差分矩陣 二維差分

輸入乙個n行m列的整數矩陣,再輸入q個操作,每個操作包含五個整數x1,y1,x2,y2,c,其中 x1,y1 和 x2,y2 表示乙個子矩陣的左上角座標和右下角座標。每個操作都要將選中的子矩陣中的每個元素的值加上c。請你將進行完所有操作後的矩陣輸出。輸入格式 第一行包含整數n,m,q。接下來n行,每...

差分 (2)二維差分

前面部分我們介紹了一維差分,下面我們擴充套件一下,來介紹二維差分。我們有乙個矩陣,如下圖所示。根據二維字首和表示的是右上角矩形的和,由於差分只涉及前面相鄰的數 由一維可以推出 並且由前面範圍的數相加得到這個位置的數。那麼模擬二維字首和和一維差分,可以簡單推測出二維差分的公式 如何從差分矩陣得到原矩陣...