题目描述
小科准备分配它的N只奶牛(1 <= N <= 25,000) 做清洁工作,他把一天分成T(1 <= T <= 1,000,000)个时间段,他希望每一个时间段都有奶牛在清洁,但搞清洁的奶牛数越少越好。
输入格式
第一行,两个整数N和T。
接下来N行,每行两个整数,表示第i头奶牛能工作的时间段。
输出格式
一行,使每一个时间段都有奶牛工作的最少奶牛数,如果不可能,则输出-1。
输入输出样列
输入样例1:
3 10 1 7 3 6 8 10
输出样例1:
2
说明
样例解释:
有3头奶牛,第1头能工作的时间段是1至7,即从时间1开始工作,时间7结束(时间7也在工作的),第2头是3-6,第3头是8-10,则只需要第1头和第3头奶牛就能使每一个时间都有奶牛工作。
【耗时限制】1000ms 【内存限制】128MB
//
//Created by Carlgood.
//
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<sstream>
using namespace std;
struct Num
{
int l,r;
}a[25010];
bool cmp(const Num &x,const Num &y)
{
return x.l<y.l;
}
int main()
{
int n,T;
cin>>n>>T;
int s=1,t=T+1;
for(int i=1;i<=n;i++)
{
cin>>a[i].l>>a[i].r;
a[i].r++;
}
sort(a+1,a+n+1,cmp);
int k=0,ans=1;
for(int i=1;i<=n;i++)
{
if(a[i].l>s)
{
if(a[i].l>k)
{
break;
}
ans++;
s=k;
}
if(a[i].l<=s) k=max(k,a[i].r);
if(k>=t) break;
}
if(k==t) cout<<ans;
else cout<<-1;
return 0;
}