Description

你的老板命令你将停车场里的车移动成他想要的样子。
停车场是一个长条矩形,宽度为w。我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系。停车场很长,我们可以认为它一直向右边伸展到无穷远处。
车都是边平行于坐标轴的矩形,大小可能不同。你可以将车任意地平移(但不能旋转),只要他们不超出停车场的边界,且不能互相碰撞,但紧挨着是允许的(即任意时刻任两辆车的重叠面积为0)。
你知道目前各辆车的摆放位置,以及老板心中所想的位置。你需要判断是否可以办到老板的任务。

Input

第一行为一个整数t(1<=t<=20),表示测试数据数量。
对于每组测试数据,第一行两个整数n,w(1<=n<=50000,1<=w<=10^9),分别表示车的数量和停车场的宽度。
接下来n行,第i行有四个整数x1,y1,x2,y2(0<=x1,x2<=10^9,0<=y1,y2<=w),表示编号为i的车的当前位置是由x1,y1,x2,y2确定的矩形。(注意:数据有可能出现x1>x2或y1>y2)
再接下来n行,格式和意义同上,表示车的目标位置。

Output

输出t行,第i行为TAK(是)或NIE(否),表示第i组测试数据中能否按照要求进行移动。

Sample Input

2
3 3
0 0 2 2
2 1 4 3
4 0 6 1
0 0 2 2
2 1 4 3
0 2 2 3
3 3
0 0 2 2
2 1 4 3
4 0 6 1
2 1 4 3
0 0 2 2
4 0 6 1

Sample Output

TAK
NIE

HINT

Source

鸣谢Jcvb

r_64考试的原题,只不过r_64把它弱化了一下;

首先给出一个结论,手完2就会发现,但是r_64略证了一下:
     对。准确地来说这是道结论题。如果两个滑块宽度(y 2 − y 1 )之和大于w,且横坐标相对
位置前后不一致,那么就无解。
     仔细想想其实挺有道理。首先,如果这样的两个滑块存在,那么在移动过程中它们的相
对顺序(谁在左谁在右)肯定会发生改变。这样,必定有一个时刻,一条直线x = x 0 同时穿过
这两个滑块。但是这与它们宽度之和大于w矛盾。

于是我们只要找到x1[i]>x1[j],x3[i]<x3[j[,len[i]>w-len[j],就是不合法,这个看起来是个三维偏序啊,但是我们只有找到一个就行了;

所以第三维len[i]只要记max就行了,所以就是二维偏序了,一维排序后树状数组即可;

//MADE BY QT666
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=100050;
struct data{
int x1,x2,x3,x4,y1,y2,y3,y4,len;
}g[N];
int n,w,tr[N],tot,hsh[N];
bool cmp(const data &a,const data &b){
if(a.x1==b.x1) return a.x3>b.x3;
return a.x1>b.x1;
}
int lowbit(int x){return x&-x;}
void update(int x,int v){
for(int i=x;i<=tot;i+=lowbit(i)) tr[i]=max(tr[i],v);
}
int query(int x){
int ret=0;
if(x==0) return 0;
for(int i=x;i;i-=lowbit(i)) ret=max(ret,tr[i]);
return ret;
}
int main(){
int T;scanf("%d",&T);int tmp=0;
while(T--){
scanf("%d%d",&n,&w);int flg=0;tot=0;tmp++;
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&g[i].x1,&g[i].y1,&g[i].x2,&g[i].y2);
if(g[i].x1>g[i].x2) swap(g[i].x1,g[i].x2);
if(g[i].y1>g[i].y2) swap(g[i].y1,g[i].y2);
hsh[++tot]=g[i].x1;
g[i].len=g[i].y2-g[i].y1;
}
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&g[i].x3,&g[i].y3,&g[i].x4,&g[i].y4);
if(g[i].x3>g[i].x4) swap(g[i].x3,g[i].x4);
if(g[i].y3>g[i].y4) swap(g[i].y3,g[i].y4);
hsh[++tot]=g[i].x3;
}
if(!flg){
sort(hsh+1,hsh+1+tot);tot=unique(hsh+1,hsh+1+tot)-hsh-1;
sort(g+1,g+1+n,cmp);memset(tr,0,sizeof(tr));
for(int i=1;i<=n;i++){
int x=lower_bound(hsh+1,hsh+1+tot,g[i].x3)-hsh;
if(query(x-1)>w-g[i].len){
flg=1;puts("NIE");break;
}
update(x,g[i].len);
}
if(!flg) puts("TAK");
}
}
return 0;
}

bzoj 3718: [PA2014]Parking的更多相关文章

  1. [PA2014]Parking

    [PA2014]Parking 题目大意: 停车场是一个宽度为\(w(w\le10^9)\)的矩形.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直向右边 ...

  2. BZOJ 3721: PA2014 Final Bazarek

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 645  Solved: 261[Submit][ ...

  3. BZOJ 3709: [PA2014]Bohater

    3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1050  Solved: ...

  4. 【贪心】bzoj 3709:[PA2014]Bohater

    3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 653  Solved:  ...

  5. BZOJ 3713: [PA2014]Iloczyn( 枚举 )

    斐波那契数列<10^9的数很少很少...所以直接暴力枚举就行了... ------------------------------------------------------------- ...

  6. bzoj3718 [PA2014]Parking

    Description 你的老板命令你将停车场里的车移动成他想要的样子.停车场是一个长条矩形,宽度为w.我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系.停车场很长,我们可以认为它一直向 ...

  7. bzoj 3714 [PA2014]Kuglarz 最小生成树

    [PA2014]Kuglarz Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1335  Solved: 672[Submit][Status][Di ...

  8. bzoj 3722: PA2014 Final Budowa

    3722: PA2014 Final Budowa Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 303  Solved: 108[Submit][St ...

  9. BZOJ 3712: [PA2014]Fiolki 倍增+想法

    3712: [PA2014]Fiolki Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 437  Solved: 115[Submit][Status ...

随机推荐

  1. A workaround to change shared memory size for Docker containers in AWS ECS

    Issue Because of not supporting to specify the following docker run parameter, containers in ECS can ...

  2. css选择器的优先级问题

    当我们写页面的时候,不知道你会不会产生这样的问题,为什么我给他添加的这条样式分明已经选择到我要给的元素了,但是他的样式并没有生效,那是为什么呢? 定义的属性有冲突时,浏览器会选择用那一套样式呢,下面来 ...

  3. Spring Cloud教程合集

    Spring Cloud系列终于搞完啦! 这一系列是笔者的学习笔记,原书之前也给小伙伴们推荐过 <Spring Cloud微服务实战> 原书采用了较老的Brixton版,笔者在学习的过程中 ...

  4. Laravel框架使用的一些注意细节(一)

    1.资源路由RESTful 当你不想编写太多的路由的时候,肯定会用到RESTful资源控制器.但当你使用资源控制器的时候,需要注意的是,你的资源路由的名字不能与public目录下的文件有重名,否则会导 ...

  5. linux nginx搭配https

    微信小程序upload接口必须是https请求,所以就搭建https 1.申请ssl证书 这里用的是腾讯云提供的免费ssl. https://console.qcloud.com/ssl?_ga=1. ...

  6. 整理下git常用命令

    Git工作示意图 一.新建代码库 ::在当前目录新建一个Git代码库git init::新建一个目录,将其初始化为Git代码库git init [project-name]::下载一个项目和它的整个代 ...

  7. 音频传输之Jitter Buffer设计与实现

    在语音通信中Jitter Buffer(下面简称JB)是接收侧一个非常重要的模块,它是决定音质的重要因素之一.一方面它会把收到的乱序的语音包排好序放在buffer里正确的位置上,另一方面它把接收到的语 ...

  8. java-8u151-64安装与配置环境变量

    去oracle官网下载 java jdk for developments(最新发布的java9与java8有很大差别,选择8就够用了) 我是装在默认的C盘里的,直接配置环境变量了 新建JAVA_HO ...

  9. Solr管理界面详解

  10. windows10版本1709 在桌面和文件中点击右键,会引起卡顿

    windows自动升级到1709版本后出现的问题,而之前是没有这种问题的. 最终解决办法:(需要设置注册表) 运行:快捷键Win+R regedit 路径:可直接复制后粘贴+回车 HKEY_CLASS ...