#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int MAX_NUM = 100; /** * 线性查找 * @param arr * @param n * @param target * @return */ int linearSearch(int arr[], int n, int target) { for (int i = 0; i < n; ++i) { if (arr[i] == target) { return i; } } return -1; } /** * 二分查找 * @param arr * @param n * @param target * @return */ int binarySearch(int arr[], int n, int target) { int left = 0; int right = n - 1; while (left <= right) { /* * 若mid = (left+right)/2 当left和right接近整形最大值时可能溢出 * 下面的写法效果相同且不会有溢出问题 */ int mid = left + ((right - left) >> 1); if (target < arr[mid]) { right = mid - 1; } else if (target > arr[mid]) { left = mid + 1; } else { return mid; } } return -1; } /** * 查找--北京邮电大学 * @return */ int main() { int numArr[MAX_NUM]; int n; cin >> n; for (int i = 0; i < n; ++i) { cin >> numArr[i]; } /* * 二分查找之前要先排序 */ sort(numArr, numArr + n); int m; cin >> m; int target; for (int j = 0; j < m; ++j) { cin >> target; if (binarySearch(numArr, n, target) != -1) { cout << "YES" << endl; } else { cout << "NO" << endl; } } return 0; }