[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 ...
随机推荐
- 【监控笔记】【2.4】SQL Server中的 Ring Buffer 诊断各种系统资源压力情况
SQL Server 操作系统(SQLOS)负责管理特定于SQL Server的操作系统资源. 其中相关的动态管理试图sys.dm_os_ring_buffers将被标识为仅供参考.不提供支持.不保证 ...
- Maven clean install 跳过单元测试
1.使用MVN命令 mvn clean install -DskipTests 或者 mvn clean install -Dmaven.test.skip=true 2.Eclipse中设置clea ...
- Mac 切换bash zsh等shell
现在假设大家都安装了iTerm2,我们先把bash切换成zsh,使用命令行如下: chsh -s /bin/zsh 执行命令后,会让你输入电脑的密码,输入即可.完成后,需要完全退出iTerm2,再次进 ...
- 同步锁 synchronized
package ba; public class Tongbu implements Runnable{ int i=100; public void run(){ while(true){ sell ...
- Houdini:也许是你未曾听过的最振奋人心的 CSS 进化
原文链接:Houdini: Maybe The Most Exciting Development In CSS You’ve Never Heard Of更多译文将陆续推出,欢迎点赞+收藏+关注我的 ...
- [七月挑选]优化hexo目录,使本地图片能显示出来
title: 优化hexo目录,使本地图片能显示出来 查看了一下从此蜕变作者的Hexo中添加本地图片,提炼了一些能优化本地图片存放及编写是图片查看的问题. 1.修改配置文件_config.yml 里的 ...
- ubuntu14.04首次安装.md
ubuntu14.04 安装后的工作 1.换软件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 网易163更新服务器(广东广州 ...
- Apache 配置内网站点
基于端口常用于内部网站,不对外开发的网站 [root@Nagios-Server extra]# vim ../httpd.conf Listen 80 Listen 8000 Listen 9000 ...
- lspci - 列出所有PCI设备
总览 SYNOPSIS lspci [options] 描述 DESCRIPTION lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具. 为了能使用这个命令所有功能, ...
- Linux下载:wget、yum与apt-get用法及区别
一般来说著名的linux系统基本上分两大类: RedHat系列:Redhat.Centos.Fedora等 Debian系列:Debian.Ubuntu等 RedHat 系列 常见的安装包格式 rpm ...