升序数列中元素的起始位置和终止位置
给定一个按照升序排列的长度为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; }