自己写的死活通不过
#include <bits/stdc++.h>
using namespace std;
struct node{int l,r;
}T[100005];
bool cmp(node a, node b ){return a.l<b.l;
}
int main(){int i,n,max_reach,r_current,ans,L,R;while(scanf("%d%d%d",&n,&L,&R)!=EOF){for(i=0;i<n;i++){scanf("%d%d",&T[i].l,&T[i].r);}if(L==R){ans=-1;for(i=0;i<n;i++){if(T[i].l<=L&&T[i].r>=R){ans=1;break;}}printf("%d\n",ans);continue;}sort(T,T+n,cmp);r_current=L,i=0,ans=0;while(r_current<R){for(max_reach=-1e9;i<n&&T[i].l<=r_current;i++){max_reach = max(max_reach,T[i].r);}if(max_reach<=r_current){ans=-1; //既然还需要找备用区间,但备用区间没法带来更新,说明完蛋了 break;}r_current =max_reach ,ans++;}//if(r_current < R) ans=-1;printf("%d\n",ans); }return 0;
}```