51NOD 1559:车和矩形——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1559
波雷卡普有一个n×m,大小的棋盘,上面有k个车。他又放了q个矩形在上面。每一个矩形要受到保护。矩形受到保护的意思是对于该矩形内部所有的格子能够被这个矩形内的某个车攻击到或者被占据,和矩形外面的车无关,即矩形外面的车不能攻击到矩形里面。车的位置是固定的。
样例解释:
对于最后一个矩形,用红色框框表示的,因为(1,2)不能被某个车攻击到,所以是NO。
题其实不难,但是没有一定的套路基础不好想(你看我这么纯洁也没啥套路啊……)
参考:https://blog.csdn.net/Bahuia/article/details/69555088
一眼看是一个线段树,但是只能维护矩形里面的车所以考虑扫描线。
再思考什么情况下矩形是YES的:每行有车或每列有车。
于是我们只需要做两遍,第二遍把横纵坐标都反过来再做一遍就行了,只要有一个YES就是YES。
那么思路有了,我们要怎么做?
将矩形看做区间查询[x1,x2],将车看做单点修改x2为y2,这样我们将车也看成矩形,对所有矩形y2进行排序,然后按照顺序加,线段树维护区间y坐标最小值。
这样我们区间查询的答案如果>=y1那么就是YES,否则就是NO。
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=4e5+;
const int INF=1e9;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct line{
int x1,y1,x2,y2,w,id;
}d[N];
int n,m,k,q,tr[N];
bool ans[N];
inline bool cmp(line a,line b){
return a.y2==b.y2?a.w<b.w:a.y2<b.y2;
}
void build(int a,int l,int r){
tr[a]=;
if(l==r)return;
int mid=(l+r)>>;
build(a<<,l,mid);build(a<<|,mid+,r);
}
void mdy(int a,int l,int r,int x,int y){
if(l==r){
tr[a]=y;return;
}
int mid=(l+r)>>;
if(x<=mid)mdy(a<<,l,mid,x,y);
else mdy(a<<|,mid+,r,x,y);
tr[a]=min(tr[a<<],tr[a<<|]);
}
int qry(int a,int l,int r,int l1,int r1){
if(r<l1||r1<l)return INF;
if(l1<=l&&r<=r1)return tr[a];
int mid=(l+r)>>;
return min(qry(a<<,l,mid,l1,r1),qry(a<<|,mid+,r,l1,r1));
}
void solve(){
sort(d+,d+q+,cmp);
build(,,n);
for(int i=;i<=q;i++){
if(!d[i].w){
mdy(,,n,d[i].x2,d[i].y2);
}else if(!ans[d[i].id]){
ans[d[i].id]=qry(,,n,d[i].x1,d[i].x2)>=d[i].y1;
}
}
}
int main(){
n=read(),m=read(),k=read(),q=read();
for(int i=;i<=k;i++){
d[i].x2=read();d[i].y2=read();
d[i].w=;
}
for(int i=;i<=q;i++){
d[i+k].x1=read();d[i+k].y1=read();
d[i+k].x2=read();d[i+k].y2=read();
d[i+k].id=i;d[i+k].w=;
}
q+=k;solve();
swap(n,m);
for(int i=;i<=q;i++){
swap(d[i].x1,d[i].y1);
swap(d[i].x2,d[i].y2);
}
solve();
for(int i=;i<=q-k;i++)
if(ans[i])puts("YES");
else puts("NO");
return ;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +
+++++++++++++++++++++++++++++++++++++++++++
51NOD 1559:车和矩形——题解的更多相关文章
- 51nod 1559 车和矩形
http://www.51nod.com/Challenge/Problem.html#problemId=1559 倘若矩形是受保护的,那么矩形内每一行至少有一个车或者每一列至少有一个车 判断矩形内 ...
- 【51nod】1559 车和矩形
题解 离线读入,我们发现一个矩形能被保护,矩形内部所有列上必定有一辆车,或者所有行上必定有一辆车 分两次进行处理 第一次按照横坐标把车加进去,然后查询最大横坐标在这个位置的矩形,纵坐标区间里的车出现位 ...
- 51nod 最近刷题 简要题解
51nod 1564 由于数据是随机的,可以证明,对于每一个数,向左或右找比它小的数,长度是logn级别的 考虑枚举最大值 注意,对于每一个最大值,如果直接用2个循环枚举左右端点的话,理论是lognl ...
- 51NOD 1227:平均最小公倍数——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1227 懒得打公式了,看这位的吧:https://blog.csdn.ne ...
- 洛谷 P1191 矩形 题解
P1191 矩形 题目描述 给出一个 \(n \times n\)的矩阵,矩阵中,有些格子被染成白色,有些格子被染成黑色,现要求矩阵中白色矩形的数量 输入格式 第一行,一个整数\(n\),表示矩形的大 ...
- HDU -1506 Largest Rectangle in a Histogram&&51nod 1158 全是1的最大子矩阵 (单调栈)
单调栈和队列讲解:传送门 HDU -1506题意: 就是给你一些矩形的高度,让你统计由这些矩形构成的那个矩形面积最大 如上图所示,如果题目给出的全部是递增的,那么就可以用贪心来解决 从左向右依次让每一 ...
- 51nod 1244 莫比乌斯函数之和
题目链接:51nod 1244 莫比乌斯函数之和 题解参考syh学长的博客:http://www.cnblogs.com/AOQNRMGYXLMV/p/4932537.html %%% 关于这一类求积 ...
- 【BZOJ2338】[HNOI2011]数矩形 几何
[BZOJ2338][HNOI2011]数矩形 题解:比较直观的做法就是枚举对角线,两个对角线能构成矩形当且仅当它们的长度和中点相同,然后用到结论:n个点构成的矩形不超过n^2.5个(不会证),所以两 ...
- P1115 最大子段和&P1719 最大加权矩形
上接:DP&图论 DAY 1 上午 这两个题本质是一个亚子,所以放一起啦 DPDPDPDPDPDPDPDP P1115 最大子段和 题解 因为题目要求的是一段连续的区间,所以前缀和搞暴力??? ...
随机推荐
- directive 指令一
什么是Directive Directive将一段html,js封装在一起,形成一个可以复用的独立个体,具有特定的功能.angularjs中的指令通常是比较小的组件,它相当于是给我们提供了一些公共的自 ...
- TPO 02 - The Origins of Cetaceans
TPO 02 - The Origins of Cetaceans It should be obvious that cetaceans[n. 鲸目动物]-whales, porpoises [n. ...
- vscode中安装使用markdown 插件
linux中好用的IDE vscode是微软推出的一款好用免费的IDE,可以快速部署开发环境,所说配置有些繁琐,但是瑕不掩瑜.它同时支持很多种拓展的编辑器,MarkDown只是其中的一种. 安装 ...
- gevent协程、select IO多路复用、socketserver模块 改造多用户FTP程序例子
原多线程版FTP程序:http://www.cnblogs.com/linzetong/p/8290378.html 只需要在原来的代码基础上稍作修改: 一.gevent协程版本 1. 导入geven ...
- 互评Alpha版本——可以低头,但没必要——取件帮
基于NABCD评论作品,及改进建议: 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着电商平台的发展,越来越多的人选择网购,但是东师的一部分快递网点不在校内,需要走很长的一 ...
- “我爱淘”第二冲刺阶段Scrum站立会议6
完成任务: 完成学院分类的点击查看书籍功能,可以点击书的条目查看书的详细信息. 计划任务: 将书的详细信息进行完善,并且可以点击收藏以及已预订等功能. 遇到问题: 分类功能,根据不同学院,自动将数据库 ...
- UIView maskView属性
给View1的maskView 赋值View2 1.View2不会显示在View1上: 2.View2 的alpha通道会体现在View1上. 关于maskView,Apple的解释: An opti ...
- 严重: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"] java.lang.NullPointer
刚接触servlet类,按照课本的方法使用eclipse新建了一个servlet类. 新建完成后,在web.xml里面进行注册 这时候就会报错了. 五月 07, 2016 11:23:28 上午 or ...
- Spring管理过滤器:org.springframework.web.filter.DelegatingFilterProxy
配置web.xml <filter> <filter-name>springSecurityFilterChain</filter-name> ...
- 第八次java笔记
