File tree Expand file tree Collapse file tree 1 file changed +73
-0
lines changed
Expand file tree Collapse file tree 1 file changed +73
-0
lines changed Original file line number Diff line number Diff line change 1+ ```
2+ import java.io.*;
3+ import java.util.*;
4+
5+ public class Main {
6+ private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+ private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+ private static int[][] arr;
9+ private static int[] memo;
10+ private static int N;
11+
12+ public static void main(String[] args) throws IOException {
13+ init();
14+ int maxLen = DP();
15+
16+ bw.write((N-maxLen) + "\n");
17+ bw.flush();
18+ bw.close();
19+ br.close();
20+ }
21+
22+ private static void init() throws IOException {
23+ N = Integer.parseInt(br.readLine());
24+
25+ arr = new int[N][2];
26+ memo = new int[N];
27+
28+ for (int i = 0; i < N; i++) {
29+ StringTokenizer st = new StringTokenizer(br.readLine());
30+ int a = Integer.parseInt(st.nextToken());
31+ int b = Integer.parseInt(st.nextToken());
32+
33+ arr[i][0] = a;
34+ arr[i][1] = b;
35+ }
36+
37+ Arrays.sort(arr, (o1, o2) -> Integer.compare(o1[0], o2[0]));
38+ }
39+
40+ private static int DP() {
41+ int len = 0;
42+
43+ for (int i = 0; i < N; i++) {
44+ int key = arr[i][1];
45+
46+ if (len == 0 || memo[len - 1] < key) {
47+ memo[len] = key;
48+ len++;
49+ } else {
50+ int index = binarySearch(len - 1, key);
51+ memo[index] = key;
52+ }
53+ }
54+
55+ return len;
56+ }
57+
58+ private static int binarySearch(int right, int key) {
59+ int left = 0;
60+
61+ while (left < right) {
62+ int mid = left + (right-left)/2;
63+
64+ if (memo[mid] >= key) {
65+ right = mid;
66+ }
67+ else left = mid+1;
68+ }
69+
70+ return right;
71+ }
72+ }
73+ ```
You can’t perform that action at this time.
0 commit comments