HDU 5480

传送门 :Conturbatio


There are many rook on a chessboard, a rook can attack the row and column it belongs, including its own place. 

There are also many queries, each query gives a rectangle on the chess board, and asks whether every grid in the rectangle will be attacked by any rook? 
InputThe first line of the input is a integer  TT, meaning that there are  TT test cases. 

Every test cases begin with four integers  n,m,K,Qn,m,K,Q
KK is the number of Rook,  QQ is the number of queries. 

Then  KK lines follow, each contain two integers  x,yx,y describing the coordinate of Rook. 

Then  QQ lines follow, each contain four integers  x1,y1,x2,y2x1,y1,x2,y2 describing the left-down and right-up coordinates of query. 

1n,m,K,Q100,0001≤n,m,K,Q≤100,000

1xn,1ym1≤x≤n,1≤y≤m

1x1x2n,1y1y2m1≤x1≤x2≤n,1≤y1≤y2≤m
OutputFor every query output "Yes" or "No" as mentioned above.

Sample Input

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
Sample Output
Yes
No
Yes

        题目大意:棋盘上的一个车可以吃掉同一行同一列的棋子,告诉你 车 的坐标和 一块区域,看看在这块区域中的棋子是不是都会被吃掉


        前缀和 ? 

        树状数组??


        代码如下    

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=100000+10;
int row[maxn],col[maxn];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m,k,q;
        memset(row,0,sizeof(row));
        memset(col,0,sizeof(col));
        scanf("%d%d%d%d",&n,&m,&k,&q);
        while(k--)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            row[a]=1,col[b]=1;  //赋值为1  有可能出现相同的不能累加
        }
        for(int i=1;i<=n;i++)
        {
            row[i]+=row[i-1];
        }
        for(int i=1;i<=m;i++)
        {
            col[i]+=col[i-1];
        }
        while(q--)
        {
            int x1,y1,x2,y2,res1,res2;
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            res1=row[x2]-row[x1-1];
            res2=col[y2]-col[y1-1];
            if(res1==(x2-x1+1)||res2==(y2-y1+1))
                printf("Yes\n");
            else
                printf("No\n");
        }
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值