[PA2014]Parking

题目大意:

停车场是一个宽度为\(w(w\le10^9)\)的矩形。我们以其左下角顶点为原点,坐标轴平行于矩形的边,建立直角坐标系。停车场很长,我们可以认为它一直向右边伸展到无穷远处。

总共有\(n(n\le5\times10^4)\)辆车。车都是边平行于坐标轴的矩形,大小可能不同。你可以将车在停车场内任意地平移,且不能互相重叠。

告诉你每辆车目前的位置和目标位置,求是否可以通过移动达到目标状态。

思路:

如果两辆车路线必定会相交,且两辆车宽度加起来大于\(w\),那么就不能达到目标状态。

从右到左枚举目标状态中的车,树状数组按照初始状态维护从左到右的前缀最大值即可。

源代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=5e4+1;
int n,w,rank[N];
struct Rect {
int x1,x2,w,id;
void read() {
int y1,y2;
x1=getint();
y1=getint();
x2=getint();
y2=getint();
w=std::abs(y1-y2);
if(x1>x2) std::swap(x1,x2);
}
bool operator < (const Rect &rhs) const {
if(x1==rhs.x1) return x2<rhs.x2;
return x1<rhs.x1;
}
};
Rect s[N],t[N];
class FenwickTree {
private:
int val[N];
int lowbit(const int &x) const {
return x&-x;
}
public:
void reset() {
std::fill(&val[1],&val[n]+1,0);
}
void modify(int p,const int &x) {
for(;p<=n;p+=lowbit(p)) {
val[p]=std::max(val[p],x);
}
}
int query(int p) const {
int ret=0;
for(;p;p-=lowbit(p)) {
ret=std::max(ret,val[p]);
}
return ret;
}
};
FenwickTree bit;
int main() {
for(register int T=getint();T;T--) {
n=getint(),w=getint();
bit.reset();
for(register int i=1;i<=n;i++) {
s[i].read();
s[i].id=i;
}
for(register int i=1;i<=n;i++) {
t[i].read();
t[i].id=i;
}
std::sort(&s[1],&s[n]+1);
std::sort(&t[1],&t[n]+1);
for(register int i=1;i<=n;i++) {
rank[s[i].id]=i;
}
for(register int i=n;i>=1;i--) {
if(bit.query(rank[t[i].id])+t[i].w>w) {
puts("NIE");
goto Next;
}
bit.modify(rank[t[i].id],t[i].w);
}
puts("TAK");
Next:;
}
return 0;
}

最新文章

  1. Quartz任务调度基本使用
  2. myeclipse打红叉
  3. 智能车学习(十)&mdash;&mdash;MMA8451加速度计的使用
  4. [C#-SQLite] SQLite一些奇怪的问题
  5. Mongodb For C# &quot;Query&quot; 对象常用的方法
  6. 使用 Protocol Buffers 代替 JSON 的五个原因
  7. esriControlsMousePointer 控制鼠标指针
  8. 《Effective C++》内存管理
  9. [汇编语言]-第七章 SI和DI
  10. 在Android项目中使用Java8
  11. 28 Python初学(事件驱动模型)
  12. python迭代和解析(3):range、map、zip、filter和reduce函数
  13. CRF 条件随机场工具包
  14. 【linux】16进制格式查看命令hexdump
  15. 【驱动】Linux初级驱动系列框架
  16. Linux安装配置samba教程(CentOS 6.5)
  17. [转]ArrayList的实现原理
  18. 我的一次rsync+inotify本地数据同步示例
  19. PHP获取固定概率
  20. Ubuntu下快速部署安装 Nginx + PHP + MySQL 笔记

热门文章

  1. Stanford Local 2016 G &quot;Ground Defense&quot;(线段树)
  2. JS学习笔记Day15
  3. CentOS7部署Dotnet Core2.1
  4. 阿里云ECS服务器Ubuntu安装MySQL并远程访问
  5. 【Unity]】AR小工具-Vuforia
  6. websocket 与Socket.IO介绍
  7. WebService - [Debug] java.net.BindException: Can&#39;t assign requested address
  8. Pycharm新建模板默认添加作者时间等信息
  9. Redis 如何实现持久化
  10. Jquyer相册