import java.util.*;
public class Main {
static class Car {
long x; // 使用long避免位置值过大导致溢出
int v;
Car(long x, int v) {
this.x = x;
this.v = v;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Car[] cars = new Car[n];
for (int i = 0; i < n; i++) {
long x = scanner.nextLong();
int v = scanner.nextInt();
cars[i] = new Car(x, v);
}
// 按位置排序,位置小的车在后面,位置大的车在前面
Arrays.sort(cars, (a, b) -> Long.compare(a.x, b.x));
// 提取速度序列
int[] speeds = new int[n];
for (int i = 0; i < n; i++) {
speeds[i] = cars[i].v;
}
// 找出最长非递增子序列的长度
int maxNonIncreasing = longestNonIncreasingSubsequence(speeds);
// 需要移除的车辆数 = 总车辆数 - 最长非递增子序列的长度
System.out.println(n - maxNonIncreasing);
}
// 计算最长非递增子序列的长度,使用O(n log n)算法
private static int longestNonIncreasingSubsequence(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
List<Integer> tails = new ArrayList<>();
for (int num : nums) {
// 找到第一个小于num的位置(二分查找)
int left = 0, right = tails.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (tails.get(mid) <= num) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if (left == tails.size()) {
tails.add(num);
} else {
tails.set(left, num);
}
}
return tails.size();
}
}