修改后的代码如下:++#include <iostream>#include <vector>#include <algorithm>typedef long long ll;int main(){ int n, m; ll x, y; std::cin >> n >> m; std::vector<ll> a(n), b(m), c(n + m); for (int i = 0; i < n; ++i) { std::cin >> x; a[i] = x; c[i] = x; } for (int i = 0; i < m; ++i) { std::cin >> y; b[i] = y; c[n + i] = y; } std::sort(c.begin(), c.end()); for (int i = 0; i < n; ++i) { ll ans = a[i]; int l = 0, r = c.size() - 1; while (l < r) { int mid = l + (r - l) / 2; if (c[mid] >= ans) r = mid; else l = mid + 1; } std::cout << l + 1 << std::endl; } std::cout << std::endl; for (int i = 0; i < m; ++i) { ll ans = b[i]; int l = 0, r = c.size() - 1; while (l < r) { int mid = l + (r - l) / 2; if (c[mid] >= ans) r = mid; else l = mid + 1; } std::cout << l + 1 << std::endl; } return 0;}
主要的修改包括:
1. 将 vector 的大小定义为 n + m,避免不必要的调整大小操作。
2. 在输入数据时,将元素存入向量 a 和 b 中,并且将它们的值同时放入向量 c 中。
3. 使用 std::sort 函数来对向量 c 进行排序。
4. 对于每个元素 a[i] 和 b[i],使用二分查找在有序向量 c 中找到其插入位置,并输出位置信息。
5. 修改了一些变量的初始值和循环索引,使得程序逻辑更加清晰。
希望以上修改对你有所帮助,如果还有其他问题,请随时向我提问。 |