题目连接 :
https://www.acwing.com/problem/content/791/
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e5+10;
int a[N];
int main()
{
int n,q;
scanf("%d%d",&n,&q);
for(int i=1;i<= n;i++) scanf("%d", &a[i]);
int k;
while(q--){
scanf("%d",&k);
// 第一种二分
int l=1,r=n;
while(l<r){
int mid = l + r >> 1;
if(a[mid]>=k) {//具有>= x 的性质,答案在左半部分r = mid
r = mid;
}
else{
l = mid +1;
}
}
if(a[l] != k){
printf("-1 -1\n");
}
else{
printf("%d ",l-1);
// 第二种二分
l = 1, r = n;
while(l < r){
int mid = l + r + 1 >> 1;
if(a[mid]<= k){// 找到具有<= x 的性质,此时答案在右边半部分,更新l
l = mid;//更新l 的时候需要mid +1
}
else{
r = mid -1;
}
}
printf("%d\n",l-1);
}
}
return 0;
}