[CF46D]Parking Lot
题目:Parking Lot
传送门:http://codeforces.com/problemset/problem/46/D
分析:
做法一:
1)这题和Hotel那题一样,也可以看做是求区间空位的问题,不过相对于Hotel那题细节会更多一些。
2)头和尾是不用考虑前和后是否有车的,但可以在$-B$和$L+F$这两个位置假装停了一辆车,这样就不用考虑第一辆插入的车和插入在最后的车啦,减少思考量。
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxN=;
int a[],b[];
struct Segment{
int setL,setR,setN;
int l0[maxN<<],r0[maxN<<],m0[maxN<<],tag[maxN<<];
void Down(int v,int l,int r){
if(tag[v]==-)return;
int mid=(l+r)>>;
l0[v<<]=r0[v<<]=m0[v<<]=(!tag[v])*(mid-l+);
l0[v<<^]=r0[v<<^]=m0[v<<^]=(!tag[v])*(r-mid);
tag[v<<]=tag[v<<^]=tag[v];tag[v]=-;
}
void Up(int v,int l,int r){
int mid=(l+r)>>;
if(l0[v<<]==(mid-l+))l0[v]=l0[v<<]+l0[v<<^];else l0[v]=l0[v<<];
if(r0[v<<^]==(r-mid))r0[v]=r0[v<<]+r0[v<<^];else r0[v]=r0[v<<^];
m0[v]=max(max(m0[v<<],m0[v<<^]),r0[v<<]+l0[v<<^]);
}
int que(int v,int l,int r){
if(l==r)return l;
Down(v,l,r);
int mid=(l+r)>>;
if(m0[v<<]>=setN)return que(v<<,l,mid);
if(r0[v<<]+l0[v<<^]>=setN) return mid-r0[v<<]+;
return que(v<<^,mid+,r);
}
void set(int v,int l,int r){
if(setL<=l && r<=setR){
l0[v]=r0[v]=m0[v]=(!setN)*(r-l+);
tag[v]=setN;return;
}
Down(v,l,r);
int mid=(l+r)>>;
if(setL<=mid)set(v<<,l,mid);
if(mid< setR)set(v<<^,mid+,r);
Up(v,l,r);
}
}T;
int main(){
int L,B,F,n;
scanf("%d%d%d%d",&L,&B,&F,&n);
T.l0[]=T.r0[]=T.m0[]=B+L+F;
for(int op,x,d,td,i=;i<=n;++i){
scanf("%d",&op);
if(op==){
scanf("%d",&td);d=B+td+F;
if(T.m0[]<d)puts("-1");
else{
T.setN=d;x=T.que(,-B,L+F-);
a[i]=T.setL=x+B;b[i]=T.setR=a[i]+td-;T.setN=;
T.set(,-B,L+F-);
printf("%d\n",a[i]);
}
}else{
scanf("%d",&td);
T.setL=a[td];T.setR=b[td];T.setN=;
T.set(,-B,L+F-);
}
}
return ;
}
做法二:
2)关注到$n$非常小
3)利用map来储存停了车区间,保留区间头尾就好了
4)插入车:遍历map,查看两个停车区间的中间是否可以停下当前这辆车
代码:
#include <bits/stdc++.h>
using namespace std;
map<int,int>mp;
int a[];
int main(){
int L,B,F,n;
scanf("%d%d%d%d",&L,&B,&F,&n);
mp[-B]=-B;mp[L+F]=L+F;
for(int i=,op,x;i<=n;++i){
scanf("%d%d",&op,&x);
if(op==){
a[i]=-;
for(auto it1=mp.begin(),it2=++mp.begin();it2!=mp.end();++it1,++it2) {
if(it2->first - it1->second >=B+x+F) {
a[i]=it1->second + B;
mp[a[i]]=a[i]+x;
break;
}
}
printf("%d\n",a[i]);
}else mp.erase(a[x]);
}
return ;
}
[CF46D]Parking Lot的更多相关文章
- [转载]完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ (好像现在这个博客已经挂掉了,在网上找到的全部都是转载) 今天在清北学堂听课,听到了一些很令人吃惊的消息.至于这消息具体是啥,等 ...
- 【转】线段树完全版~by NotOnlySuccess
线段树完全版 ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...
- 《完全版线段树》——notonlysuccess
转载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文 ...
- 【转】 线段树完全版 ~by NotOnlySuccess
载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章 ...
- 【转载】完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...
- [LintCode] Parking Lot 停车场问题
Design a parking lot. see CC150 OO Design for details.1) n levels, each level has m rows of spots an ...
- [CareerCup] 8.4 Parking Lot 停车场问题
8.4 Design a parking lot using object-oriented principles. LintCode上的原题,请参见我的另一篇博客Parking Lot 停车场问题. ...
- Codeforces 46D Parking Lot
传送门 D. Parking Lot time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #135 (Div. 2) E. Parking Lot 线段数区间合并
E. Parking Lot time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
随机推荐
- 在线cron表达式生成工具
http://cron.qqe2.com/ 名称 是否必须 允许值 特殊字符 秒 是 0-59 , - * / 分 是 0-59 , - * / 时 是 0-23 , - * / 日 是 1-31 , ...
- Java程序基本框架
对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态.(Java是以类为组织单位) 方 ...
- 深入IO 想学必看!受益匪浅哦~
一:IO流概述 IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数据传输,Java对于数据的操作都是通过流实现,而Java用于操作流的对象都在IO包中. 分类: 按操作数据 ...
- 关于XML的一些事
XML:可扩展标记语言! 01.很像HTML 02.着重点是数据的保存 03.无需预编译 04.符合W3C标准 可扩展:我们可以自定义,完全按照自己的规划来! 标记:计算机所能认识的信息符号! 比如: ...
- SpringMVC框架 课程笔记
SpringMVC框架 课程笔记 第0章 SpringMVC框架的核心内容 1.SpringMVC 概述 2.SpringMVC 的 HelloWorld 3.使用 @RequestMapping 映 ...
- spark性能调优03-shuffle调优
1.开启map端输出文件的合并机制 1.1 为什么要开启map端输出文件的合并机制 默认情况下,map端的每个task会为reduce端的每个task生成一个输出文件,reduce段的每个task拉取 ...
- CenterOS7中解决No package mysql-server available.
CenterOS7中解决No package mysql-server available. 1.使用yum install -y mysql-server报错如下: [root@heyong_jd ...
- linux MySql 的主从复制部署
MySql 复制 mysql 复制:将某一台主机上的 Mysql 数据复制到其它主机(slaves)上,并重新执行一遍从而实现 当前主机上的 mysql 数据与(master)主机上数据保持一致的过程 ...
- Windows 开启 winrm
# Windows 开启 winrm ``` Enable-PSRemoting winrm enumerate winrm/config/listener winrm quickconf ...
- JavaScript设计模式 样例一 —— 工厂模式
工厂模式(Factory Pattern): 定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. 目的:工厂模式是为了解耦,把对象的创建和使用 ...