编辑代码

#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;

#define INF 0X7fffffff

struct p {
	int a, b;
	
}d[20000000];

int N, T;



bool cmp(p p1, p p2) {
	if(p1.a!=p2.a)
	return p1.a < p2.a;
	else return p1.b > p2.b;
}

int main() {
	
	while (scanf("%d%d",&N,&T)!=EOF) {
		
		int mi = INF, ma = -1;
		for (int i = 0; i < N; i++) {
			scanf("%d%d", &d[i].a, &d[i].b);
			mi = min(mi, d[i].a);
			ma = max(ma, d[i].b);
		}
		
		if (mi > 1 || ma < T) {
			printf("-1\n");
			continue;
		}

		sort(d,d+N,cmp);
		int *v = new int[N];
		for (int i = 0; i < N; i++) v[i] = 0;

		p now;
		int count = 0;
		now = d[0];
		v[0] = 1;
		count++;
		int bz = 0;
		int j = -1;

		while (now.b < T) {
			int k = -1, M = -1;
			for (int i = j + 1; i < N; i++) {
				if (!v[i]) {
					if (M<d[i].b&&d[i].a <= now.b + 1 && d[i].a>now.a) {
						M = d[i].b;
						k = i;
					}
				}
			}
			if (k == -1) {
				bz = 1;
				break;
			}
			now = d[k];
			j = k;
			v[k] = 1;
			count++;
		}
		if (bz) printf("-1\n");
		else printf("%d\n", count);
    }
	return 0;
}