[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 ...
随机推荐
- [转帖]Windows下cwRsyncServer双机连续同步部署
Windows下cwRsyncServer双机连续同步部署 https://www.cnblogs.com/nulige/p/7607503.html 找时间做一下测试 应该能更好的实现 自动部署的功 ...
- Java数据结构之递归(Recursion)
1. 递归解决问题 各种数学问题如:8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题(google编程大赛) 各种算法中也会使用到递归,比如快速排序,归并排序,二分查找,分治算法等 将用栈解决的 ...
- 【7.24校内交流赛】T1&T2
T1: 一个脑洞很大的题,将输入的所有数异或起来输出就好了: (话说我为什么这么喜欢用异或啊) #include<bits/stdc++.h> using namespace std; i ...
- QT linux下显示中文的问题
如果中文显示为乱码,那么是字符集不对. 应该设置字符集: QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK") ...
- SCUT - G - 魔法项链 - 树状数组
https://scut.online/contest/30/G 很久以前做的一个东西,当时是对R排序之后树状数组暴力统计当前区间的前缀和.每有一个元素出现在R的范围内,就解除他的同样元素的影响,在他 ...
- Find The Multiple (水题)
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal repr ...
- Vue切换页面时中断axios请求
一.概述 在Vue单页面开发过程中,遇到这样的情况,当我切换页面时,由于上一页面请求执行时间长,切换到该页面时,还未执行完,这时那个请求仍会继续执行直到请求结束,此时将会影响页面性能,并且可能对现在页 ...
- mysql时间类型
转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html AVA中获取当前系统时间 一. 获取当前系统时间和日期并格式化输出 ...
- python multiprocessing模块
python multiprocessing模块 原文地址 multiprocessing multiprocessing支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queu ...
- Mysql逻辑架构介绍
总体概览: 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离 ...