Conturbatio
在一個n×m的國際象棋棋盤上有很多車(Rook),其中車可以攻擊他所屬的一行或一列,包括它自己所在的位置。
現在還有很多詢問,每次詢問給定一個棋盤內部的矩形,問矩形內部的所有格子是否都被車攻擊到?
輸入文件包含多組數據,第一行爲數據組數T。 每組數據有4個正整數n,m,K,Q。 K爲車的數量,Q爲詢問的個數。 接下來有K行,每行兩個整數x,y , 表示車所在的座標。 再接下來有Q行,每行4個整數x1,y1,x2,y2,表示詢問的矩形的左下角與右上角的座標。 1≤n,m,K,Q≤100,000. 1≤x≤n,1≤y≤m. 1≤x1≤x2≤n,1≤y1≤y2≤m.
對於每組詢問,輸出Yes或No。
2 2 2 1 2 1 1 1 1 1 2 2 1 2 2 2 2 2 1 1 1 1 2 2 1 2 2
Yes No Yes
輸入數據過大,建議使用scanf
出題人:可以發現如果一個矩陣被全部攻擊到,很顯然要麼是因爲它的每一行都有車,
或者每一列都有車。所以只需要記錄一下哪些行和哪些列有車,對於每個詢問只需要
做一個前綴和就可以知道答案了。
#include
#include
#include
using namespace std;
const int N=100005;
int xx[N],yy[N];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(xx,0,sizeof(xx));
memset(yy,0,sizeof(yy));
int n,m,k,q,i,x,y,x1,y1,maxn=0,mixn=N;
scanf("%d%d%d%d",&n,&m,&k,&q);
for(i=0; i