풀이
기본적인 이분 탐색 문제입니다.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n, m;
bool search(const vector<int>& v, int num)
{
int left = 0, right = n - 1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (v[mid] > num) right = mid - 1;
else if (v[mid] < num) left = mid + 1;
else return true;
}
return false;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());
cin >> m;
for (int i = 0; i < m; i++) {
int tmp; cin >> tmp;
cout << search(v, tmp) << ' ';
}
return 0;
}
반례
Input
10
10 -7 134 66 73 81 9 -150 95 88
10
-7 1 2 77 66 94 95 88 100 -150
Output
1 0 0 0 1 0 1 1 0 1
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 2812번: 크게 만들기 (0) | 2021.04.20 |
---|---|
[백준/C,C++] 1049번: 기타줄 (0) | 2021.04.20 |
[백준/C,C++] 1654번: 랜선 자르기 (0) | 2021.04.20 |
[백준/C,C++] 7576번: 토마토 (0) | 2021.04.20 |
[백준/C,C++] 2667번: 단지번호붙이기 (0) | 2021.04.20 |
댓글