也超时了,题目说用二分
时间: 2024-03-10 22:49:44 浏览: 22
很抱歉,我没仔细读题目,确实可以用二分来解决这个问题。下面是修改后的代码:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_N = 1e5 + 5;
int a[MAX_N];
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n); // 先将数组排序
for (int i = 0; i < m; i++) {
int x;
cin >> x;
// 使用二分查找找到第一个大于等于 x 的位置
int l = 0, r = n - 1;
while (l < r) {
int mid = (l + r) / 2;
if (a[mid] >= x) {
r = mid;
} else {
l = mid + 1;
}
}
// 统计 x 出现的次数
int cnt = 0;
while (l < n && a[l] == x) {
cnt++;
l++;
}
cout << cnt << " ";
}
return 0;
}
```
代码解释:
首先读入整数 $n$ 和 $m$,然后依次读入 $n$ 个整数存入数组 $a$ 中,再将数组 $a$ 排序。接下来依次读入 $m$ 个询问的数 $x$,使用二分查找找到第一个大于等于 $x$ 的位置 $l$,然后从 $l$ 开始向后遍历数组,统计 $x$ 出现的次数即可。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)