/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
int s, v;
scanf("%d %d", &s, &v);
printf("%d", s*v);
return 0;
}
*/
//1 2 3 4 5
//2 23 55 87 100
//
//5 2 100 55
//-1 1 5 3
//
//100만개의 숫자를 불러주고,
//10만개의 숫자 위치를 찾아봐
//
//1개의 위치를 찾으려면 100만번 비교
//10만개의 위치를 찾으려면 10만*100만 번 비교
//
//정렬이 되어있는 데이터가 들어온다면???
//전부 다 찾아보지 않아도 돼
//up-down game
//1~ 50사이의 임의의 수 찾기
//
//정렬되어있는 100만개의 숫자를 갖고있어.
//숫자 하나를 찾고싶으면 , 1번 ~100만번까지 순서대로 보는것 보다는,
//
//1. 50만번째 숫자가 그 숫자와 같나요? 큰가요? 작은가요?
//2. 찾아야 할 데이터의 갯수가 반으로 줄어든다 ( 탐색 범위를 줄여간다)
//3. 이런식으로 반복하다보면 훨씬 빠르게 찾을 수 있따
//이분탐색 = 이진탐색 = binary search
//
//이등분 : 반으로 똑같이 쪼개는거
//이분 : 반으로 쪼개는거
#include <stdio.h>
int a[100001]={};
int t;
int bs(int s, int e, int k) //a[s] ~ a[e]에서 k값의 위치 리턴
{
int mid = (s+e)/2;
if(s==a[mid] || a[mid]==e){
return -1;
}
if(a[mid]==k){
return mid;
}
else if(a[mid]<k){
return bs(mid+1, e, k);
}
else{
return bs(s, mid-1, k);
}
}
int main()
{
int s, v, i;
scanf("%d", &s);
for(i=1; i<=s; i++){
scanf("%d", &a[i]);
}
scanf("%d", &v);
for(i=1; i<=v; i++){
scanf("%d", &a[i]);
}
for(i=1; i<=v; i++){
t=a[i];
printf("%d ", bs(1, s, t));
}
}