题意介绍
数轴上有 n 个闭区间 [ai, bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)
题意分析
将所有区间按bi升序排序,如果两个区间有共同的bi,则这两个区间已经有一个共同的点bi,按ai降序排序即可。第一步,标记第一个区间的右端点,第二个区间的左端点与之比较,如果大于标记,说明两个区间没有交点,需增加一个点,然后将标记移动到第二个区间的右端点,然后重复下去。
通过代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int N;
struct p {
int a, b;
};
bool cmp(p &p1, p &p2) {
if (p1.b != p2.b) return p1.b < p2.b;
else return p1.a > p2.a;
}
int main() {
cin >> N;
p *data = new p[N];
for (int i = 0; i < N; i++) {
cin >> data[i].a >> data[i].b;
}
sort(data, data + N, cmp);
int count = 1;
int current = data[0].b;
for (int i = 1; i < N; i++) {
if (data[i].a > current) {
current = data[i].b;
count++;
}
}
cout << count << endl;
delete[]data;
}