思路:
这道题让求区间覆盖,它要求只能一个一个的区间,先对n个区间进行排序,按照区间的结束点前后进行排序。所以从后往前看结束时间点,如果下一个的起点在前一个的结束点之后,则数量加1。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
int s,e;
};
node a[1000010];
int cnt=1;
int n;
bool cmp(node aa,node bb)
{
return aa.e<bb.e;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i].s>>a[i].e;
sort(a,a+n,cmp);
int p=a[0].e;//第一段不用看,从1开始加
for(int i=1;i<n;i++)
{
if(a[i].s >= p)
{
cnt++;
p=a[i].e;
}
}
cout<<cnt;
return 0;
}