简单
F - Flight Collision
传送门
题意:在 x 轴上有 n 个无人机,他们都以一定速度移动,两个无人机一旦撞上就会坠落,问剩几个无人机不会坠落
做法:优先队列存结构体,结构体存一对飞机的编号和这对飞机相撞的时间,优先队列按照相撞时间从小到大排序。优先队列内维护的内容是即将相撞的一对飞机编号,永远不会撞上的不进优先队列。对于一对一定会撞上的无人机,它们的坠落将会使得它们左右的第一架活着的无人机变成相邻关系,而且这对无人机也有可能会相撞,所以问题就变成了如何找到左右第一架无人机,答案是 set 存编号用二分。找右边很简单,就是一个 upper_bound,找左边则有两种做法,第一种做法:因为set内维护的编号在删掉相撞的两个编号后一定相邻,所以右边的 -1 就是左边要找的。第二种做法比第一种好想:开两个 set,一个存正编号,一个存负编号,找左边的就可以对左无人机编号取负后 upper_bound。