kk=Tree[t].left;
pd=1;
}
return ;
}
mid=MID(Tree[t].left,Tree[t].right);
if(Tree[t].max
if(Tree[t].leftmax>=m) //优先选择满足情况的左子树
Query(L(t),l,mid,m);
else if(Tree[t].rightmax>=m) //左子树不满足,才选择右子树
Query(R(t),mid+1,r,m);
else
return ;
Tree[t].leftmax=Tree[L(t)].max;
Tree[t].rightmax=Tree[R(t)].max;
Tree[t].max=MAX(Tree[t].leftmax,Tree[t].rightmax);
}
int main()
{
while(scanf("%d%d%d",&h,&w,&n)!=EOF)
{
if(h>n)
h=n;
memset(Tree,0,sizeof(Tree)); //初始化线段树
Build(1,1,h); //建树
for(i=0;i
scanf("%d",&m);
pd=0;
Query(1,1,h,m); //查询[1,h]满足MAX>=n的区间
if(pd)
printf("%d\n",kk);
else
printf("-1\n");
}
}
return 0;
}