Conturbatio
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 975 Accepted Submission(s): 439
Problem Description
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?
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?
Input
The first line of the input is a integer
T
,
meaning that there are T
test cases.
Every test cases begin with four integers n,m,K,Q
.
K
is the number of Rook, Q
is the number of queries.
Then K
lines follow, each contain two integers x,y
describing the coordinate of Rook.
Then Q
lines follow, each contain four integers x1,y1,x2,y2
describing the left-down and right-up coordinates of query.
1≤n,m,K,Q≤100,000
.
1≤x≤n,1≤y≤m
.
1≤x1≤x2≤n,1≤y1≤y2≤m
.
Every test cases begin with four integers n,m,K,Q
K
Then K
Then Q
1≤n,m,K,Q≤100,000
1≤x≤n,1≤y≤m
1≤x1≤x2≤n,1≤y1≤y2≤m
Output
For 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 YesHintHuge input, scanf recommended.
题意:给你n*m的方格,给你k个车,其中车可以攻击他所属的一行或一列,包括它自己所在的位置,.再给你q行,每行4个整数x1 , y1 , x2 , y2x1,y1,x2,y2,表示询问的矩形的左下角与右上角的坐标。
可以开两个数组,一个表示行,一个表示列,一个车所在的行列记录下来。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 100005
int r[N],c[N];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(r,0,sizeof(r));
memset(c,0,sizeof(c));
int n,m,k,q;
scanf("%d%d%d%d",&n,&m,&k,&q);
for(int i=0;i<k;i++)
{
int a,b;
scanf("%d%d",&a,&b);
r[a]=1;
c[b]=1;
}
for(int i=2;i<=n;i++)
{
r[i]+=r[i-1];
}
for(int i=2;i<=m;i++)
{
c[i]+=c[i-1];
}
for(int i=0;i<q;i++)
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(r[x2]-r[x1-1]==x2-x1+1||c[y2]-c[y1-1]==y2-y1+1)//如果两个条件都不满足,说明至少有一行一列没有车,那这一个行列所对应的值也就不能被攻击到
printf("Yes\n");
else printf("No\n");
}
}
return 0;
}