思路:
贪心策略,每一次选择结束时间尽可能远的牛牛,无限WA~哭哭~~
测试样例:
2 10
1 5
6 10 // 输出2
1 10
2 10 //输出-1
3 10
1 5
3 12
5 10 //输出2
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<functional>
#include<algorithm>
using namespace std;
typedef pair<int,int>P;
const int inf=0x3f3f3f3f;
const int Max_n=1e5+10;
int n,t;
P a[Max_n];
int main()
{
scanf("%d%d",&n,&t);
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].first,&a[i].second);
a[n].first=t+1;a[n].second=inf; //处理边界
sort(a,a+n+1);
if(a[0].first!=1){printf("-1\n");return 0;} //起点特判
int sum=1,t=a[0].second,k=t;
for(int i=1;i<=n;i++){
if(a[i].first<=t+1)k=max(k,a[i].second);
else {
if(k+1<a[i].first){printf("-1\n");return 0;}
sum++;t=k;k=a[i].second;
}
}
printf("%d\n",sum);
return 0;
}