奥赛一本通 1429 线段

1429 线段

题目大意

给定 $n$ 个区间,求至多可以选择多少个互不相交的区间。(同 1422 活动安排)

知识要点

排序、贪心

解题思路

将所有区间按右端点排序,根据贪心的思路,右端点越靠前的越应该优先选择。

参考代码

#include <bits/stdc++.h>
using namespace std;

struct Line {
    int a, b;
} L[1000005];
bool cmp(Line A, Line B) {
    return A.b < B.b;
}
int main() {
    int n, t = 0, ans = 0; // t 记录当前的右端点
    scanf("%d", &n);
    for(int i = 0; i < n; i++) scanf("%d%d", &L[i].a, &L[i].b);

    sort(L, L + n, cmp);
    for(int i = 0; i < n; i++) if(t <= L[i].a) ans++, t = L[i].b;
    printf("%d\n", ans);
    return 0;
}
posted @ 2026-09-02 15:05  萧西待水  阅读(3)  评论(0)    收藏  举报