1 条题解

  • 1
    @ 2025-1-12 15:01:55

    我们假设最大不相交区间数 < 最少覆盖区间点数, 此时有一种选法:从被每个点覆盖的的区间任选一个,则此时最大不相交区间数 = 最少覆盖区间点数,假设不成立。

    我们假设最大不相交区间数 > 最少覆盖区间点数 此时意味着从被每个点覆盖的的区间任选一个外,还能多选一个或多个,这与最少覆盖区间点数定义相悖(多选的这些区间没有被点覆盖),假设不成立。

    所以:最大不相交区间数 = 最少覆盖区间点数。

    本题代码与上题一模一样。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N = 100010;
    struct Node
    {
        int l;
        int r;
    }a[N];
    bool cmp(Node a, Node b)
    {
        return a.r < b.r;
    }
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; ++ i)
        {
            int l, r;
            cin >> l >> r;
            a[i].l = l, a[i].r = r;
        }
        sort(a + 1, a + n + 1, cmp);
        int end = -2e9, res = 0;
        for (int i = 1; i <= n; ++ i)
        {
            if (a[i].l > end)
            {
                res++;
                end = a[i].r;
            }
        }
        cout << res << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    5528
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者