首先将所有车辆按位置升序排序,确保处理顺序正确。然后提取速度序列,目标是找到最长不下降子序列,代表可以保留的最大车辆数而不发生碰撞。使用动态规划和二分查找的方法高效计算最长不下降子序列。最后,最少需要移除的车辆数即为总车辆数减去最长不下降子序列大小,从而避免所有可能的碰撞。
import java.util.*;
一条单向单车道的道路上有n辆车,第i辆车位于 xi;,速度大小为 vi 。
显然,如果车辆保持此速度行驶下去,在大多数情况下都会发生碰撞。
现在小红想知道,至少需要移除几辆车,才能让这些车不发生碰撞?
第一行一个整数 n(1≤n≤105),表示车的数量。
接下来n 行,每行两个整数 xi,vi(∣xi∣,∣vi∣,∣vi∣≤109),表示车的位置和速度的大小。
数据保证 xi 互不相同。
输出一行一个整数,表示需要移除车的数量。
输入
3
-1 -1
0 0
1 1
输出
0
说明
输入
3
-1 1
0 0
1 -1
输出
2
说明