用c++完成这道题:题目描述 给定一个 nn 个数的数组 aa,再给定 mm 次询问,每次询问一个整数 xx 在数组 aa 中是否存在,如果存在,输出 Y,不存在输出 N。 输入 第 11 行是一个整数 nn(5≤n≤10^55≤n≤10 5 ); 第 22 行有 nn 个整数,数与数之间用空格隔开; 第 33 行有一个整数mm(5≤m≤10^55≤m≤10 5 ); 第 44 行有 mm 个整数,数与数之间用空格隔开; 输出 输出 mm 次查询每次查询的结果(Y 或者 N),每次查询结果之间用空格隔开。用二分
时间: 2024-03-14 08:44:01 浏览: 17
好的,这里给出二分的 C++ 代码实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int a[100005];
int binary_search(int l, int r, int x)
{
while (l <= r)
{
int mid = (l + r) / 2;
if (a[mid] == x)
return mid;
else if (a[mid] < x)
l = mid + 1;
else
r = mid - 1;
}
return -1;
}
int main()
{
int n, m, x;
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n); // 排序
cin >> m;
for(int i = 0; i < m; i++)
{
cin >> x;
int index = binary_search(0, n - 1, x);
if(index != -1)
cout << "Y ";
else
cout << "N ";
}
return 0;
}
```
这里将数组进行了排序,然后通过二分查找来判断元素是否存在。如果元素存在,返回下标,否则返回 -1。