#include<stdio.h>
int main(){
int N,M,w[11][4],c[11]; //window[窗口号][]0表示x1,1表示y1,2表示x2,3表示y2
scanf("%d%d",&N,&M);
for(int i = 1; i < N+1;i++){
c[i] = i; //c[层数]=窗口号
}
for(int i=1;i<N+1;i++){ //存储各窗口坐标
scanf("%d%d%d%d",&w[i][0],&w[i][1],&w[i][2],&w[i][3]);
} //此时第N层c[N]窗口号是N
int p[M],count=0,flag; //输出数组
for(int i = 1; i <= M; i++){ //M个坐标
int x,y,l,ii; //location层数
scanf("%d%d",&x,&y); //得到输入坐标
flag = 0;
for( ii = N; ii > 0; ii --) { //从第N层(顶层)开始判断 处于顶层的窗口号是 c[ii]
if(x >= w[ c[ii] ][ 0 ] && x <= w[ c[ii] ][ 2 ]
&& y >= w[ c[ii] ][ 1 ] && y <= w [ c[ii] ][ 3 ]){ //若属于这一层
l = c[ii];
p[ count++ ] = l;
flag = ii; //做个标记,为下面判断层数使用
ii = 0; //找到则将ii置零,跳出for循环
}
}
if(flag == 0){ //说明不在任何一个窗口
p[count++]=0; //用0做标记 输出时判断 是0则输出IGNORED
}
else{ //重新调整窗口位置
while( flag < N){ //将从flag+1层~最顶层的窗口都下移一层
c[flag] = c[flag+1];
flag++;
}
c[N] = l; //最顶层置为刚刚访问到的这层
}
}
for(int i=0;i<M;i++){ //输出M个结果
if(p[i]!=0){
printf("%d\n",p[i]);
}
else printf("IGNORED\n");
}
return 0;
}
欢迎交流指导。