|
发表于 2023-11-19 16:41:28
|
显示全部楼层
修改后的代码如下:
- ++
- #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. 修改了一些变量的初始值和循环索引,使得程序逻辑更加清晰。
希望以上修改对你有所帮助,如果还有其他问题,请随时向我提问。 |
|