import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); //贪心+排序+动态规划 //速度正负数分别表示两个方向 //两辆车某一时刻处于同一个位置会发生碰撞 //碰撞条件1.它们朝对方运动或同向但后车更快,并且后车能追上或相向而行相遇 //静止的车有车朝它开过来 → 会撞上 //最长不碰撞子序列,所有车按位置x从小到大排序速度非递减排序 int n=in.nextInt(); int[][]cars=new int[n][2]; for(int i=0;i<n;i++){ cars[i][0]=in.nextInt(); cars[i][1]=in.nextInt(); } //按位置排序 Arrays.sort(cars,(a,b)->Integer.compare(a[0],b[0])); //求数组最长非递减子序列 List<Integer>list=new ArrayList<>(); for(int i=0;i<n;i++){ int v=cars[i][1]; int l=0,r=list.size(); while(l<r){ int mid=(l+r)/2; //找第一个>=v的元素 if(list.get(mid)<=v){ l=mid+1; }else{ r=mid; } } if(l==list.size()){ list.add(v); }else{ //把l位置的值改成v list.set(l,v); } } System.out.println(n-list.size()); } }