#include<bits/stdc++.h>
using namespace std;#definedbdouble#definelllonglong#definePirpair<int,int>#definefifirst#definesesecond#definepbpush_back#definem_pmake_pair#defineinf0x3f3f3f3f#defineINF0x3f3f3f3f3f3f3f3f/*==========ACMer===========*/constint N =1e5+10;
Pir p[N];intmain(){int s, t;scanf("%d %d",&s,&t);int n;scanf("%d",&n);int x, y;for(int i =1; i <= n; i ++){scanf("%d %d",&x,&y);
p[i]=m_p(x, y);}sort(p +1, p +1+ n);int i =1;int ans =0;while(i <= n){int mx =-inf;while(i <= n && p[i].fi <= s){
mx =max(mx, p[i].se);
i ++;}if(mx < s){printf("-1\n");return0;}
s = mx;
ans ++;if(mx >= t){printf("%d\n", ans);return0;}}printf("-1\n");return0;}
思路从左向右贪心遇到没覆盖的点就选选段。代码#include <bits/stdc++.h>using namespace std;#define db double#define ll long long#define Pir pair<int, int>#define fi first#define se second#define pb push_back#define m_p make_pair#define inf 0x3f3f3f3.