题目: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的更多相关文章

  1. [转载]完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ (好像现在这个博客已经挂掉了,在网上找到的全部都是转载) 今天在清北学堂听课,听到了一些很令人吃惊的消息.至于这消息具体是啥,等 ...

  2. 【转】线段树完全版~by NotOnlySuccess

    线段树完全版  ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...

  3. 《完全版线段树》——notonlysuccess

    转载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文 ...

  4. 【转】 线段树完全版 ~by NotOnlySuccess

    载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章 ...

  5. 【转载】完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...

  6. [LintCode] Parking Lot 停车场问题

    Design a parking lot. see CC150 OO Design for details.1) n levels, each level has m rows of spots an ...

  7. [CareerCup] 8.4 Parking Lot 停车场问题

    8.4 Design a parking lot using object-oriented principles. LintCode上的原题,请参见我的另一篇博客Parking Lot 停车场问题. ...

  8. Codeforces 46D Parking Lot

    传送门 D. Parking Lot time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. 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 ...

随机推荐

  1. docker--docker 的web可视化管理工具

    12 docker 的web可视化管理工具 12.1 常用工具介绍 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越 重要. Docker的图形化管理工具,提供状 ...

  2. 最小配置启动SQL SERVER,更改SQL Server最大内存大小导致不能启动的解决方法

    如果存在配置问题而无法启动服务器,则可以使用最小配置启动选项来启动 Microsoft SQL Server 实例. 这就是启动选项 -f. 使用最小配置启动 SQL Server 实例会自动将服务器 ...

  3. 傻傻分不清?Integer、new Integer() 和 int 的面试题

    这篇有意思: 基本概念的区分: 1.Integer 是 int 的包装类,int 则是 java 的一种基本数据类型 2.Integer 变量必须实例化后才能使用,而int变量不需要 3.Intege ...

  4. Python 实用脚本

    Python 实用脚本 脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而 ...

  5. SCUT - 484 - 平面上的点 - 数据结构

    https://scut.online/p/484 一开始想的是按固定斜率的直线从无穷扫下来,但是一直都WA,不知道是哪里错了还是精度问题? #include<bits/stdc++.h> ...

  6. Restful,SAOP,SOA,RPC的基础理解

    什么是Restful restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构.而满足这些约束条件和原则的应用程序或设计就是 RESTful架构或服务. 主要的设计原则: 资源与URI ...

  7. 常用css相关笔记

    最后一个css不加样式 .nav-sort li:not(:last-child) { border-bottom:#3e3e3e 1px solid; } 垂直居中 vertical-align: ...

  8. eclipse项目添加到本地仓库

    右键项目→Team→Add to Index 提交后,项目变化如下: *表示已经提交到暂存区,可以进行提交操作 右键项目→Team→Commit 可以填写提交信息: 点击信息下面的commit按钮 项 ...

  9. 95-基于FMC接口的2路CameraLink Base输出子卡模块

    基于FMC接口的2路CameraLink Base输出子卡模块 1.板卡概述 FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中都使用.该Ca ...

  10. PAT Advanced 1005 Spell It Right (20 分)

    Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output e ...