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