题目链接:

G - Intersecting Rectangles

Kattis - intersectingrectangles

题目大意:给你n个矩形,每一个矩形给你这个矩形的左下角的坐标和右上角的坐标,然后问你这些矩形会不会相交,如果存在相交的点,输出1,否则输出0。

具体思路:扫描线,我们首先对x进行排序,然后判断当前x直线对应的线段上是否有x已经覆盖,如果已经有就证明存在相交的情况。但是这样会存在多算的情况,所以我们对于每一个矩形的左端点打一个标记,然后右端点再打一个标记,当左端点的时候,先询问,再去更新。对于右端点,先更新,再去询问。

感谢lxw的讲解。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
const int maxn = 4e5+;
int tree[maxn<<];
struct node{
int y1,y2,x,flag;
node(){}
node(int xx,int yy,int zz,int kk){
y1=xx;
y2=yy;
x=zz;
flag=kk;
}
bool friend operator <(node t1,node t2){
return t1.x<t2.x;
}
}q[maxn<<];
int lowbit(int t){
return t&(-t);
}
int ask(int t){
int ans=;
while(t){
ans+=tree[t];
t-=lowbit(t);
}
return ans;
}
void update(int pos,int val){
while(pos<=4e5+){
tree[pos]+=val;
pos+=lowbit(pos);
}
}
vector<int>w;
int main(){
int n;
scanf("%d",&n);
int x1,y1,x2,y2;
for(int i=;i<=n;i++){
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
q[i]=node(y1,y2,x1,);
q[i+n]=node(y1,y2,x2,-);
w.push_back(x1);
w.push_back(x2);
w.push_back(y1);
w.push_back(y2);
}
sort(w.begin(),w.end());
sort(q+,q+*n+);
int k=;
for(int i=;i<=*n;i++){
int l=lower_bound(w.begin(),w.end(),q[i].y1)-w.begin()+;
int r=lower_bound(w.begin(),w.end(),q[i].y2)-w.begin()+;
if(q[i].flag==){
if(ask(r)-ask(l)>){
k=;
break;
}
update(l,);
update(r,);
}
else {
update(l,-);
update(r,-);
if(ask(r)-ask(l)>){
k=;
break;
}
}
}
if(k){
printf("1\n");
}
else {
printf("0\n");
}
return ;
}

G - Intersecting Rectangles Kattis - intersectingrectangles (扫描线)(判断多个矩形相交)的更多相关文章

  1. POJ 1410--Intersection(判断线段和矩形相交)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16322   Accepted: 4213 Des ...

  2. poj 1410 Intersection (判断线段与矩形相交 判线段相交)

    题目链接 Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12040   Accepted: 312 ...

  3. Kattis - intersectingrectangles 扫描线+线段树

    题目:https://open.kattis.com/problems/intersectingrectangles 题意::给你n个矩形,每一个矩形给你这个矩形的左下角的坐标和右上角的坐标,然后问你 ...

  4. Codeforces Round #587 (Div. 3) C题 【判断两个矩形是否完全覆盖一个矩形问题】 {补题 [差点上分系列]}

    C. White Sheet There is a white sheet of paper lying on a rectangle table. The sheet is a rectangle ...

  5. C:矩形相交、相包含、相离关系判断

    矩形相交 包含 问题.参考 假定矩形是用一对点表达的(minx, miny) (maxx, maxy),那么两个矩形    rect1{(minx1, miny1)(maxx1, maxy1)}    ...

  6. 判断线段和直线相交 POJ 3304

    // 判断线段和直线相交 POJ 3304 // 思路: // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. #include <cstdio ...

  7. Rectangle and Square(判断正方形、矩形)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=42#problem/D 改了N多次之后终于A了,一直在改判断正方形和矩形那,判断 ...

  8. Pick-up sticks(判断两条线段是否相交)

    Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8351 Accepted: 3068 Description Stan has ...

  9. 判断直线与线段相交 POJ 3304 Segments

    题意:在二维平面中,给定一些线段,然后判断在某直线上的投影是否有公共点. 转化,既然是投影,那么就是求是否存在一条直线L和所有的线段都相交. 证明: 下面给出具体的分析:先考虑一个特殊的情况,即n=1 ...

随机推荐

  1. 做IT项目管理也需要具备产品思维

    不知道大家有没有听过大胡子姜志辉老师的公开课,我自己认为讲的还是不错的. 因为本身大胡子老师就是一个IT行业的人士,自己还经历了程序员.架构师.项目经理.敏捷教练.产品经理.公司持有人等多个角色.所以 ...

  2. request 请求头的处理

    一.请求头:说明了请求要带的一些说明,有的请求需要带,有的不需要带 一般会带上格式,对于新浪微博来说,他一定要带上user-agent content-type:application/json 二. ...

  3. bzoj 4326: NOIP2015 运输计划(二分+树链剖分)

    传送门 题解: 树链剖分快速求解任意两点间的路径的权值和: 然后,二分答案: 此题的难点是如何快速求解重合路径? 差分数组可以否??? 在此之前先介绍一下相关变量: int fa[maxn]; int ...

  4. echarts 调整图表大小的方法

    第一次使用Echarts,大小用的不是那么随心应手,通过文档和百度出的结果,发现其实很简单: 内部图表大小是与div容器大小相关的,如果想调整图表大小,调整div就可以了 如果是想调整图表与div间上 ...

  5. Qt ------ linux(ubuntu) 下用 linuxdeployqt 打包发布程序

    https://github.com/probonopd/linuxdeployqt/releases 1.下载linuxdeployqt 2.把下载的文件放入 /usr/local/bin 内,并执 ...

  6. centos7.4+openvpn-2.4.4+easy-rsa-3.0

    [生产环境物理机安装]openvpn2.4.4服务搭建,并可以正常运行 服务器内网:172.31.33.64 openvpn:10.8.0.0 本机ifconfig yum install epel- ...

  7. day06-(mysql)

    建表: CREATE DATABASE mysqltest2; USE mysqltest2; -- 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, -- ...

  8. python csv与字典操作

    # encoding: utf-8 import csv d1 = {'banana':3,'apple':4,'pear':1,'orange':2} d2 = {'banana':3,'orang ...

  9. 【openssl】利用openssl完成X509证书和PFX证书之间的互转

    利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址—— https://www.openssl.org/source/ OpenSSL ...

  10. 网络编程基础【day09】:socket实现文件发送(六)

    本节内容 1.概述 2.文件下载实现 3.MD5值校验 一.概述 我们如何利用socket去下载一个文件,整体思路是这样的: 读取文件名 检测文件是否存在 打开文件 检测文件大小 发送文件大小给客户端 ...