正经题解
2024-10-22 22:32:23
发布于:天津
8阅读
0回复
0点赞
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 查找第一个大于 x 的元素的下标(1-based)
int f(const vector<int>& a, int x) {
int l = 0; // 左指针
int r = a.size(); // 右指针
while (l < r) {
int m = l + (r - l) / 2; // 中间位置
if (a[m] <= x) { // 如果中间元素小于或等于 x
l = m + 1; // 移动左指针到中间位置右侧
} else { // 如果中间元素大于 x
r = m; // 移动右指针到中间位置
}
}
return l + 1; // 返回 1-based index
}
int main() {
int n;
cin >> n; // 输入数组大小
vector<int> a(n); // 创建数组
for (int i = 0; i < n; ++i) {
cin >> a[i]; // 输入数组元素
}
int x;
cin >> x; // 输入要查找的元素
int res = f(a, x); // 调用查找函数
if (res > n) { // 如果没有找到大于 x 的元素
cout << -1 << endl; // 输出 -1
} else {
cout << res << endl; // 输出下标
}
return 0;
}
全部评论 3
。
2024-10-25 来自 天津
0。
2024-10-25 来自 天津
0。
2024-10-25 来自 天津
0
有帮助,赞一个