Run ID:154231

提交时间:2026-05-28 15:11:29

#include <iostream> #include <vector> int main() { int n; if (!(std::cin >> n)) return 0; std::vector<int> arr(n); for (int i = 0; i < n; ++i) { std::cin >> arr[i]; } int m; std::cin >> m; int first_pos = -1; int last_pos = -1; // 1. 查找第一次出现的位置 int low = 0, high = n - 1; while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid] == m) { first_pos = mid + 1; // 记录位置 high = mid - 1; // 继续向左找 } else if (arr[mid] < m) { low = mid + 1; } else { high = mid - 1; } } // 如果第一次都没找到,说明序列中没有该数字 if (first_pos == -1) { std::cout << -1 << std::endl; return 0; } // 2. 查找最后一次出现的位置 low = 0, high = n - 1; while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid] == m) { last_pos = mid + 1; // 记录位置 low = mid + 1; // 继续向右找 } else if (arr[mid] < m) { low = mid + 1; } else { high = mid - 1; } } std::cout << first_pos << " " << last_pos << std::endl; return 0; }