这个确实是经典的区间判断法,判断区间重合,覆盖次数一系列的问题,方法都是按照区间的左/右端点排序,然后依次判断即可。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static Scanner sn = new Scanner(System.in);
static PriorityQueue<int[]> queue;
public static void init() {
queue = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] t, int[] t1) {
return t[1] - t1[1];
}
});
}
public static void main(String[] args) throws IOException {
while (true) {
int n = Integer.parseInt(br.readLine());
if (n == 0) break;
init();
for (int i = 0; i < n; i++) {
String s[] = br.readLine().split(" ");
int l = Integer.parseInt(s[0]);
int r = Integer.parseInt(s[1]);
queue.offer(new int[]{l, r});
}
int res = 1;
while (!queue.isEmpty()) {
int t[] = queue.poll();
while (!queue.isEmpty()) {
int p[] = queue.peek();
if (t[1] <= p[0]) {
res++;
break;
} else queue.poll();
}
}
System.out.println(res);
}
}
}