#include <stdio.h>
#include <stdlib.h>
int Msort(int *arr, int len);
int BinarySearch(int *arr, int size, int findData);
int main(){
int i;
int n, m;
scanf("%d", &n);
int *arr;
arr = (int *)malloc(n*sizeof(int)); // 동적할당
for(i = 0; i < n; i++){
scanf("%d", &arr[i]);
}
Msort(arr, sizeof(arr));
scanf("%d", &m);
int *Farr;
Farr = (int *)malloc(m*sizeof(int)); // 동적할당
for(i = 0; i < m; i++){
scanf("%d", &Farr[i]);
printf("%d\n", BinarySearch(arr, sizeof(arr), Farr[i]));
}
}
int Msort(int *arr, int len){
if(len < 2) return 0;
int mid = len / 2;
Msort(arr, mid);
Msort(arr + mid, len - mid);
int *buf;
buf = (int *)malloc(sizeof(int)*len);
int i = 0;
int j = mid;
int k = 0;
while(i < mid && j < len)
buf[k++] = (arr[i] < arr[j]) ? arr[i++] : arr[j++];
while(i < mid)
buf[k++] = arr[i++];
while(j < len)
buf[k++] = arr[j++];
for(i = 0; i < len; i++){
arr[i] = buf[i];
}
}
int BinarySearch(int *arr, int size, int findData){
int mid;
int left = 0;
int right = size - 1; // 배열 마지막 값을 가진 index는 size - 1 이다.
while(left <= right){
mid = (left + right) / 2;
if(findData < arr[mid]) right = mid - 1;
else if(findData > arr[mid]) left = mid + 1;
else return 1;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBNc29ydChpbnQgKmFyciwgaW50IGxlbik7CmludCBCaW5hcnlTZWFyY2goaW50ICphcnIsIGludCBzaXplLCBpbnQgZmluZERhdGEpOwoKaW50IG1haW4oKXsKICAgIGludCBpOwogICAgaW50IG4sIG07CiAgICBzY2FuZigiJWQiLCAmbik7CiAgICBpbnQgKmFycjsKICAgIGFyciA9IChpbnQgKiltYWxsb2MobipzaXplb2YoaW50KSk7IC8vIOuPmeygge2VoOuLuQogICAgZm9yKGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICBzY2FuZigiJWQiLCAmYXJyW2ldKTsKICAgIH0KICAgIE1zb3J0KGFyciwgc2l6ZW9mKGFycikpOwogICAgc2NhbmYoIiVkIiwgJm0pOwogICAgaW50ICpGYXJyOwogICAgRmFyciA9IChpbnQgKiltYWxsb2MobSpzaXplb2YoaW50KSk7IC8vIOuPmeygge2VoOuLuQogICAgZm9yKGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgICBzY2FuZigiJWQiLCAmRmFycltpXSk7CiAgICAgICAgcHJpbnRmKCIlZFxuIiwgQmluYXJ5U2VhcmNoKGFyciwgc2l6ZW9mKGFyciksIEZhcnJbaV0pKTsKICAgIH0KfQoKaW50IE1zb3J0KGludCAqYXJyLCBpbnQgbGVuKXsKICAgIGlmKGxlbiA8IDIpIHJldHVybiAwOwogICAgCiAgICBpbnQgbWlkID0gbGVuIC8gMjsKICAgIE1zb3J0KGFyciwgbWlkKTsKICAgIE1zb3J0KGFyciArIG1pZCwgbGVuIC0gbWlkKTsKICAgIGludCAqYnVmOwogICAgYnVmID0gKGludCAqKW1hbGxvYyhzaXplb2YoaW50KSpsZW4pOwogICAgaW50IGkgPSAwOwogICAgaW50IGogPSBtaWQ7CiAgICBpbnQgayA9IDA7CiAgICB3aGlsZShpIDwgbWlkICYmIGogPCBsZW4pCiAgICAgICAgYnVmW2srK10gPSAoYXJyW2ldIDwgYXJyW2pdKSA/IGFycltpKytdIDogYXJyW2orK107CiAgICB3aGlsZShpIDwgbWlkKQogICAgICAgIGJ1ZltrKytdID0gYXJyW2krK107CiAgICB3aGlsZShqIDwgbGVuKQogICAgICAgIGJ1ZltrKytdID0gYXJyW2orK107CiAgICAKICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKXsKICAgICAgICBhcnJbaV0gPSBidWZbaV07CiAgICB9Cn0KCmludCBCaW5hcnlTZWFyY2goaW50ICphcnIsIGludCBzaXplLCBpbnQgZmluZERhdGEpewogICAgaW50IG1pZDsKICAgIGludCBsZWZ0ID0gMDsKICAgIGludCByaWdodCA9IHNpemUgLSAxOyAvLyDrsLDsl7Qg66eI7KeA66eJIOqwkuydhCDqsIDsp4QgaW5kZXjripQgc2l6ZSAtIDEg7J2064ukLgogICAgd2hpbGUobGVmdCA8PSByaWdodCl7CiAgICAgICAgbWlkID0gKGxlZnQgKyByaWdodCkgLyAyOwogICAgICAgIGlmKGZpbmREYXRhIDwgYXJyW21pZF0pIHJpZ2h0ID0gbWlkIC0gMTsKICAgICAgICBlbHNlIGlmKGZpbmREYXRhID4gYXJyW21pZF0pIGxlZnQgPSBtaWQgKyAxOwogICAgICAgIGVsc2UgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==