```c
#include
#include
#include
using namespace std;
struct data{
int l;
int r;
int len;//长度
};
bool compare(data x,data y) {return x.len>y.len;}
bool clap(int L,int R,int a,int b)
{//判断区间[L,R]与[a,b]是否有重叠部分
if(b<=L||a>=R) return false;
else return true;
}
int main()
{
int N,L,R,li,ri;
while(scanf("%d%d%d",&N,&L,&R)!=EOF)
{
if(LR)
{
int tag=0;
while(N>0)
{
scanf("%d%d",&li,&ri);
if(liri&&liL) tag=1;
N–;
}
if(tag1) printf(“1\n”);
else printf("-1\n");
}
else
{
data arr[N];int i=0;//i表示数组长度
while(N>0)
{
scanf("%d%d",&li,&ri);
if(clap(L,R,li,ri))//若有重叠部分,则输入数组
{
arr[i].l=li;
arr[i].r=ri;
arr[i].len=ri-li;
i++;
}
N–;
}
if(i==0) printf("-1\n");
else
{
sort(arr,arr+i,compare);//按照区间长度排序
/*测试
for(int j=0;j<i;j++)
printf("%d %d\n",arr[j].l,arr[j].r);
*/
int left=arr[0].l,right=arr[0].r,index=1;//初始化,index指向下一条待加入的线段
while((left>L||right<R)&&index<i)
{
if(left>arr[index].l) left=arr[index++].l;
else if(right<arr[index].r) right=arr[index++].r;
}
/*测试
printf("left=%d,right=%d\n",left,right);
*/
if(left<=L&&right>=R)
printf("%d\n",index);
else printf("-1\n");
}
}
}
return 0;
}