题目:http://www.codeforces.com/problemset/problem/46/D
题意:有一个长为L的街道可用作停车区域。在停车时,司机应当使车与街道完全平行,并且车的方向与道路的前进方向一致。为了能方便地把车停下来,司机在寻找停车位时,要求其与后一辆车的距离不小于b、与前一辆车的距离不小于f(如果其后面无车的话,那么司机当然可以把车停在此停车区域的最末位置,同理,如果其前面无车的话,司机也可以把车停在此停车区域的最始位置)。我们引入一个坐标轴(假如x轴)。并且定义此停车区域的最末位置是0、最始位置是L。道路的前进方向(也即是司机的前进方向)是从0到L,并且司机在停车的时候,总是寻找具有最小x坐标值的位置。如果没有合适的位置,司机当然就不能把车停在这儿,只有去找其它的地方。有时,某些停在此处的汽车会离开,释放出一些空间。
输入:第一行输入三个数L b f (10 ≤ L ≤ 100000, 1 ≤ b, f ≤ 100)
第二行输入一个数n表示接下来有n个操作。接下来是n个操作。
操作分为2类,如果是第1类,表示有一个长度为x的车想要停进来;如果是第2类,表示操作为x(操作的编号从1到n,并且这个x一定是合法的,即是说,此时此刻,操作为x的那辆车一定是在此停车区域中的)的那辆车离开此停车区域。车的长度从1到1000。
输出:对于每个1操作,如果其对应的车不能停进来,输出-1,否则输出能停进来的最小的x轴坐标值。
分析:观察一下此题的数据规模,直接暴力是可以的,不会超时!但在这里,我想说下用线段树的解法。做过Hotel 后,这个题其实是非常简单的,需要注意的是b f这两个值的影响,简单讨论一下即可(我的代码中用的是3个if讨论)。