区间分组.java 1.6 KB
Newer Older
qq_36480062's avatar
c  
qq_36480062 已提交
1 2
package greedy;

qq_36480062's avatar
c  
qq_36480062 已提交
3 4 5 6 7
import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Scanner;

qq_36480062's avatar
c  
qq_36480062 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20
/**
 * 给定N个闭区间[ai,bi],请你将这些区间分成若干组,
 * 使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。
 * 输出最小组数。
 * 输入格式
 * 第一行包含整数N,表示区间数。接下来N行,
 * 每行包含两个整数ai,bi,表示一个区间的两个端点。
 * 输出格式
 * 输出一个整数,表示最小组数。
 * 数据范围
 * 1≤N≤10^5,
 * −10^9≤ai≤bi≤10^9
 * 输入样例:
qq_36480062's avatar
c  
qq_36480062 已提交
21 22 23 24
 * 3
 * -1 1
 * 2 4
 * 3 5
qq_36480062's avatar
c  
qq_36480062 已提交
25 26 27 28
 * 输出样例:
 * 2
 */
public class 区间分组 {
qq_36480062's avatar
c  
qq_36480062 已提交
29 30
    static class node implements Comparable<node> {
        int x, y;
qq_36480062's avatar
c  
qq_36480062 已提交
31

qq_36480062's avatar
c  
qq_36480062 已提交
32 33 34 35 36 37 38 39 40
        public node(int x, int y) {
            this.x = x;
            this.y = y;
        }

        @Override
        public int compareTo(node node) {
            return x - node.x;
        }
qq_36480062's avatar
c  
qq_36480062 已提交
41
    }
qq_36480062's avatar
c  
qq_36480062 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            a.add(new node(sc.nextInt(), sc.nextInt()));
        }
        Collections.sort(a);
        q.add(a.get(0).y);
        for (int i = 1; i < n; i++) {
            if (q.size() != 0 && q.peek() < a.get(i).x) {
                q.poll();
            }
            q.add(a.get(i).y);
        }
        System.out.println(q.size());
    }

    static PriorityQueue<Integer> q = new PriorityQueue<Integer>();
    static ArrayList<node> a = new ArrayList<node>();
    static int n, ans;
qq_36480062's avatar
c  
qq_36480062 已提交
63
}