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 最大子段和 题解 因为题目要求的是一段连续的区间,所以前缀和搞暴力??? ...
随机推荐
- Flutter系列博文链接
Flutter系列博文链接 ↓: Flutter基础篇: Flutter基础篇(1)-- 跨平台开发框架和工具集锦 Flutter基础篇(2)-- 老司机用一篇博客带你快速熟悉Dart语法 Flutt ...
- 每日 mark
SIGNAL=${SIGNAL:-TERM} PIDS=$(jps -lm | grep -i 'kafka\.Kafka' | awk '{print $1}')if [ -z "$PID ...
- hexo部署
title: hexo 部署(一) date: 2018-09-16 18:01:26 tags: hexo部署配置 categories: 博客搭建 hexo博客搭建 折腾了好久的时间,终于使用he ...
- 【转】在Android Studio中下载Android SDK的两种方式(Android Studio3.0、windows)
在Android Studio中下载Android SDK的两种方式(Android Studio3.0.windows) 方式一.设置HTTP Proxy1. 打开Settings2. 点击HTTP ...
- Vue学习计划基础笔记(一) - vue实例
最近又重新看vue的文档了,计划是别人写的,之前看过一次,没有考虑太多,只考虑看懂能用就好.看完之后写过写demo,现在是零实际项目经验的,所以这一次打算细看,算是官方文档的二次产物吧,但是不是全部直 ...
- hadoop2.7.1安装和部署
操作系统:Red Hat Enterprise Linux Server release 6.2 (Santiago) hadoop2.7.1 三台redhat linux主机,ip分别为10.204 ...
- Centos7 Zabbix监控部署
Zabbix监控 官方文档 https://www.zabbix.com/documentation/3.4/zh/manual https://www.zabbix.com/documentatio ...
- 大前端全栈CSS3移动端开发
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 本节课学习视频来源:https://ww ...
- FPGA选型
工欲善其事必先利其器,开发FPGA的第一步,当然是选择一片符合你设计需求的芯片. 但是芯片种类那么多,老板又要你越省越好,硬件工程师也天天问你到底该用哪块芯片,怎么办? 今天正好可以跟大家聊聊这些问题 ...
- 第9次Scrum会议(10/21)【欢迎来怼】
一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片 二.开会信息 时间:2017/10/21 17:20~17:45,总计25min.地点:东北师范 ...
