在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少。
最左边的线段放什么最好?
显然放右端点最靠左的线段最好,从左向右放,右端点越小妨碍越少
其他线段放置按右端点排序,贪心放置线段,即能放就放
。
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int x, y;
};
node arr[1000010];
bool cmp(node a, node b)
{
return a.y < b.y;
}
int main()
{
long long n,ans=0;
cin >> n;
for (int i = 0; i < n; ++i)
cin >> arr[i].x >> arr[i].y;
sort(arr, arr + n, cmp);
int end = 0;
for (int i = 0; i < n; ++i)
{
if (arr[i].x>=end)
{
++ans;
end = arr[i].y;
}
}
cout<<ans;
return 0;
}