0
点赞
收藏
分享

微信扫一扫

AcWing 905. 区间选点

大柚子top 2022-04-08 阅读 146
c++

AcWing 905. 区间选点

给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。

输出选择的点的最小数量。

位于区间端点上的点也算作区间内。

输入格式
第一行包含整数 N,表示区间数。

接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。

输出格式
输出一个整数,表示所需的点的最小数量。

数据范围

输入样例:

输出样例:

1.将每个区间按右端点从小到大排序
2.从前往后一次枚举每个区间,如果当前区间已经包含点,则直接pass,否则,选择当前区间的右端点。

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 100010;

int n;
struct Range
{
    int l, r;
    bool operator< (const Range  &w)const
    {
        return r < w.r;
    }
}range[N];

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ )
    {
        int l, r;
        cin >> l >> r;
        range[i] = {l, r};
    }
    
    sort(range, range + n);
    
    int res = 0, ed = -2e9;
    for (int i = 0; i < n; i ++ )
        if (range[i].l > ed)
        {
            res ++;
            ed = range[i].r;
        }
    cout << res << endl;
}
举报

相关推荐

0 条评论