升序数列中元素的起始位置和终止位置
给定一个按照升序排列的长度为n 的整数数组,对于每个查询,返回改元素的起始位置和终止位置。
如果数组中不存在该元素,则返回 {-1, -1}。
#include <iostream>
using namespace std;
int a[100010];
int n, q;
int BF1 (int x) {
int l = 0, r = n - 1;
while (l < r) {
int mid = l + r >> 1;
if (a[mid] >= x) r = mid;
else l = mid + 1;
}
return r;
}
int BF2 (int x) {
int l = 0, r = n - 1;
while (l < r) {
int mid = l + r + 1 >> 1;
if (a[mid] <= x) l = mid;
else r = mid - 1;
}
return l;
}
int main() {
cin >> n >> q;
for (int i = 0; i < n; i++) cin >> a[i];
while (q--) {
int x;
cin >> x;
int l = BF1(x);
if (a[l] == x) {
int r = BF2(x);
cout << l << " " << r << endl;
}
else cout << "-1 -1" << endl;
}
return 0;
}

浙公网安备 33010602011771号