C++ 解决洛谷 P2239 查找问题:思路、数据及代码实现
#### 题目信息 P2239 是洛谷上的一道题目,题目名称为“【深基13.例1】查找”。 ### 📖题目描述 输入 $n$ 个不超过 $10^9$ 的单调不减的(就是后面的数字不小于前面的数字)非负整数 $a_1,a_2,\cdots,a_n$,然后进行 $m$ 次询问。对于每次询问,给出一个整数 $q$,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 $-1$。 ### 📥输入格式 第一行 $2$ 个整数 $n$ 和 $m$,表示数字个数和询问次数。 第二行 $n$ 个整数,表示这些待查询的数字。 第三行 $m$ 个整数,表示询问这些数字的编号,从 $1$ 开始编号。 ### 📤输出格式 $m$ 个整数表示答案。 ### 📋数据范围 $1 \leq n \leq 10^6$,$1 \leq m \leq 10^5$,$1 \leq q \leq 10^9$。 ### 💡样例 #### 输入样例 ```plaintext 11 3 1 3 3 3 5 7 9 11 13 15 15 1 3 6 ``` #### 输出样例 ```plaintext 1 2 -1 ``` ### 🚩代码示例 ```cpp #include <iostream> #include <vector> using namespace std; // 二分查找目标值第一次出现的位置 int binarySearch(vector<int>& arr, int target) { int left = 0, right = arr.size() - 1; int result = -1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) { result = mid; // 继续向左查找第一次出现的位置 right = mid - 1; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } // 因为数组下标从0开始,而题目编号从1开始,所以结果要加1 if (result != -1) result++; return result; } int main() { int n, m; cin >> n >> m; vector<int> arr(n); // 输入数组元素 for (int i = 0; i < n; i++) { cin >> arr[i]; } for (int i = 0; i < m; i++) { int query; cin >> query; // 进行二分查找并输出结果 cout << binarySearch(arr, query); if (i < m - 1) { cout << " "; } } cout << endl; return 0; } ``` 此代码通过二分查找来解决在单调不减序列中查找目标值第一次出现位置的问题,复杂度为 $O(log n)$,可以满足数据范围的要求。 ######[AI问答 | 776点数解答 | 2026-07-28 21:06:57]
- Java代码实现从JSON数据中提取ID,涉及“数据”与“项目 - 知识库”结构(字节豆包 | 603点数解答 | 2025-04-15 22:48:51)311
- C++ 实现:计算一排鹅与最高、最矮鹅的身高差及代码详解(字节豆包 | 549点数解答 | 2025-11-16 20:19:06)161
- 编程揭秘:计算 𝑛! 在 𝑃 进制下末尾零个数的方法与代码实现(DeepSeek | 549点数解答 | 2026-01-11 17:49:54)126
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)539
- Java 实现通用文件存储系统:含随机读写与空闲空间回收(字节豆包 | 686点数解答 | 2024-11-21 16:25:51)292
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)207
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)241
- C++ 解决洛谷 P2239 查找问题:思路、数据及代码实现(字节豆包 | 776点数解答 | 2026-07-28 21:06:57)4
- C++洛谷P2239螺旋矩阵测试数据解析(字节豆包 | 482点数解答 | 2026-07-28 21:07:33)4
- P2239 螺旋矩阵测试数据生成与边界用例(DeepSeek | 372点数解答 | 2026-07-28 21:08:25)4
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)459
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)588