参考:
还是之前的技巧没有弄熟,在遇到这种直到满足某一条件时再进行改变时,就应该要想到用while, 方便而且思路清晰。
从这里可以看出逻辑还是不够清楚,边界条件还是拿捏的不好。
//#define LOCAL
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 25010
using namespace std;
struct interval{
int begin;
int end;
};
bool cmp(interval a, interval b){
return a.begin < b.begin;
}
int main(void){
#ifdef LOCAL
freopen("data.in", "r", stdin);
#endif
interval a[N];
int n, t;
scanf("%d%d", &n, &t);
for(int i = 0; i < n; i++)
scanf("%d%d", &a[i].begin, &a[i].end);
sort(a, a + n, cmp);
int ans = 0;
int cur = 0;
int next;
int pos = 0;
while(cur < t && pos < n){
ans++;
next = -1;
if(cur + 1 < a[pos].begin)
break;
while(a[pos].begin <= cur + 1 && pos < n){
next = max(next, a[pos].end);
pos++;
}
cur = next;
}
if(cur < t)
printf("-1\n");
else
printf("%d\n", ans);
return 0;
}