CF 46D Parking Lot(SET)
来源:互联网 发布:淘宝淘客怎么无法打开 编辑:程序博客网 时间:2024/04/28 01:19
转自:http://www.cnblogs.com/wuyiqi/archive/2012/05/01/2477735.html
题目链接:http://codeforces.com/problemset/problem/46/D
题目大意:
在长为L的(点0~点L)的线段上停车开车操作;
停车 1 x:车长x,需要b+x+f的空余才能使车停进去,多个区域,选择最左边
开车 2 x:第x次操作,停进的车,开出去
分析:因为需要插入的次数很小,所以可以直接记录,每辆汽车一次插入的位置,被占据的位置和空位间肯定是一段一段相邻的
即,比如有空位 a-b、c-d, b-c 被占据了,如果a-b不够长,那么指针就要往右移动两个位置了,即跳过中间被占据的位置
#include <cstdio>#include <cstring>#include <vector>#include <set>#include <algorithm>using namespace std;int L, B, F;int pos[105][2], tm=0;set<int> s;int main(void) { scanf("%d%d%d", &L, &B, &F); s.insert(-B); s.insert(L+F); int n; scanf("%d", &n); while(n--) { int x, y; scanf("%d%d", &x, &y); ++tm; if (x == 1) { int f=0; for(set<int>::iterator it=s.begin(); it!=s.end(); ) { set<int>::iterator nxt=it; ++nxt; if (nxt!=s.end() && ((*it)+B+y+F <= *nxt)) { printf("%d\n", (*it)+B); s.insert((*it)+B); s.insert((*it)+B+y); pos[tm][0] = *it+B; pos[tm][1] = *it+B+y; f=1; break; } ++it; if(it!=s.end()) ++it; } if(!f) puts("-1"); } else { s.erase(pos[y][0]); s.erase(pos[y][1]); } } return 0;}
- CF 46D Parking Lot(SET)
- CF 46D Parking Lot
- CF-46D Parking lot
- CF 46D Parking Lot(区间合并)
- CF-46D-Parking Lot(线段树)
- 【26.8%】【CF 46D】Parking Lot
- CF 46D D. Parking Lot 线段树成段更新
- CF 46 D. Parking Lot(线段树)
- CF 46 D Parking Lot(线段树区间合并)
- Codeforces-46D Parking Lot
- CF-46D-Parking Lot(线段树,区间合并,点表示线段)
- Codeforces 46D Parking Lot(线段树)
- Codeforces 46D Parking Lot 枚举
- codeforces 46D Parking Lot(线段树模拟区间管理 or set模拟)
- Codeforces 46D Parking Lot(贪心模拟)
- 【CodeForce】 46D Parking Lot (线段树 区间合并)
- CodeForces 46D Parking Lot(线段树区间合并)
- CodeForces 46D Parking Lot (线段树区间合并)
- Static_cast 与 Dynamic_cast的区别
- VC释放资源
- jsp使用java Bean
- Java NIO系列教程(一) Java NIO 概述
- ios自带分享及微博分享
- CF 46D Parking Lot(SET)
- dedecms数据库模型字段大小写引发的血案
- winphone动态生成textBlock、image等控件
- strtok用法
- 【排序】快速排序
- 分治算法求最近点对
- 技术人员如何创业《一》—— 产品及想法
- sql删除冗余数据
- 堆和栈的区别