描述
给定N个闭区间[l,r],请在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出所选点的最小数量。
注意:位于区间端点上的点也算作区间内。
输入描述
第一行一个整数N,表示闭区间数量(1≤N≤105)。
接下来N行,每行两个整数l,r,分别表示一个区间的左端点和右端点(−109≤l≤r≤109)。
输出描述
输出一个整数,表示所选点的最小数量。
样例输入 1
5 0 3 1 2 -1 2 0 1 4 5
样例输出 1
2
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+5;
struct Range {
int l, r;
bool operator<(const Range &W) const {
return r < W.r;
}
}range[N];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
int a, b;
cin >> a >> b;
range[i] = {a, b};
}
sort(range, range + n);
int res = 0, ed = -2e9;
for (int i = 0; i < n; ++i)
if (ed < range[i].l)
++res, ed = range[i].r;
cout << res << endl;
return 0;
}