BestCoder Round #57 (div.2)HDU 5480 Conturbatio

Conturbatio

 
 Accepts: 206
 
 Submissions: 703
 Time Limit: 6000/3000 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)
問題描述
在一個n \times mn×m的國際象棋棋盤上有很多車(Rook),其中車可以攻擊他所屬的一行或一列,包括它自己所在的位置。
現在還有很多詢問,每次詢問給定一個棋盤內部的矩形,問矩形內部的所有格子是否都被車攻擊到?
輸入描述
輸入文件包含多組數據,第一行爲數據組數TT。
每組數據有4個正整數n , m , K , Qn,m,K,QKK爲車的數量,QQ爲詢問的個數。
接下來有KK行,每行兩個整數x , yx,y , 表示車所在的座標。
再接下來有QQ行,每行4個整數x1 , y1 , x2 , y2x1,y1,x2,y2,表示詢問的矩形的左下角與右上角的座標。

1\leq n , m , K , Q \leq 100,0001n,m,K,Q100,000.
1\leq x \leq n , 1 \leq y \leq m1xn,1ym.
1\leq x1 \leq x2 \leq n , 1 \leq y1 \leq y2 \leq m1x1x2n,1y1y2m.
輸出描述
對於每組詢問,輸出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
Hint
輸入數據過大,建議使用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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章