在去城市娱乐的路上,Ming想下载一个手机游戏。Ming 正在选择要下载的游戏时,他的手机上弹出一条消息,告诉他他的流量(流量)已用完。由于路途太长,明决定买一些流量包。每个流量包只能购买一次。Ming 想知道他需要为每场比赛购买的最低流量包数量。 输入 第一行包含两个整数 n 和 q (1<=n,q<=100000),分别表示流量包的数量和游戏的数量(分别地)。第二行包含 n 个整数,第 i 个整数表示第 i 个流量包中的流量 Ai(1<=Ai<=10^9)。第三行包含 q 整数,第 i 个整数表示第 i 个游戏 xi 使用的流量 (1<=xi<=10^18)。 输出 对于第 i 行,输出一个整数 W,表示 Ming 需要为第 i 个游戏购买的流量包数量。c++代码
时间: 2024-02-13 14:01:57 浏览: 58
以下是 C++ 代码实现,使用了二分查找:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end());
for (int i = 0; i < q; i++) {
long long x;
cin >> x;
int ans = 0;
int l = 0, r = n - 1;
while (l <= r) {
int mid = (l + r) / 2;
if ((long long)a[mid] >= x) {
r = mid - 1; // 当前流量包太大,需要选择更小的流量包
} else {
ans = mid + 1; // 当前流量包可以满足需求,但可能还有更小的流量包可以满足需求
l = mid + 1;
}
}
cout << ans << endl;
}
return 0;
}
```
阅读全文