1 条题解
-
1
我们假设最大不相交区间数 < 最少覆盖区间点数, 此时有一种选法:从被每个点覆盖的的区间任选一个,则此时最大不相交区间数 = 最少覆盖区间点数,假设不成立。
我们假设最大不相交区间数 > 最少覆盖区间点数 此时意味着从被每个点覆盖的的区间任选一个外,还能多选一个或多个,这与最少覆盖区间点数定义相悖(多选的这些区间没有被点覆盖),假设不成立。
所以:最大不相交区间数 = 最少覆盖区间点数。
本题代码与上题一模一样。
#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
- 上传者