升序数列中元素的起始位置和终止位置

给定一个按照升序排列的长度为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;
}

  

posted @ 2022-11-30 20:32  !&&||  阅读(38)  评论(0)    收藏  举报