#include<cstdio>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<sstream>
#include<stack>
#include<functional>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int INF=0x3f3f3f3f;
const int MAX_N = 25005;
P t[MAX_N];
int N, T;
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif
//ios::sync_with_stdio(false);
cin >> N >> T;
int ans = 0, last = 1;
for(int i = 0; i < N; i++)scanf("%d %d",&t[i].first, &t[i].second);
//按起始时间排序
sort(t, t + N);
int i = 0;
//标记是否区间能覆盖到T
bool flag = false;
while(i < N){
if(last < t[i].first)break;
int nlast = t[i].first;
//求出下一次选择的区间在满足条件的情况
//下能到达的最远区域
while(i < N && last >= t[i].first){
nlast = max(nlast, t[i].second);
i++;
}
//选择这个区域
ans++;
//下一次选择开始时间最晚为
//上一次选择的结束时间 + 1 在这里送了一次wa
last = nlast + 1;
//但是最后一次选择必须覆盖到T
if(last - 1>= T){
flag = true;
break;
}
}
if(flag == false)cout << -1 << endl;
else cout << ans << endl;
return 0;
}
POJ 2376 Cleaning Shifts 区间贪心
最新推荐文章于 2021-11-19 19:56:50 发布