题目:789. 数的范围
思路:先用二分找到最左边的k,然后再二分找到最右边的
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,q;
int a[100010];
void find(int k){
int i=0,j=n-1;
while(i<j){
int mid=i+j>>1;
if(a[mid]<k)i=mid+1;
else j=mid;
}
if(a[i]!=k){
puts("-1 -1");
return ;
}
int ii=i;
j=n-1;
while(i<j){
int mid=i+j+1>>1;
if(a[mid]>k)j=mid-1;
else i=mid;
}
printf("%d %d\n",ii,j);
}
int main(){
scanf("%d%d",&n,&q);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
while(q--){
int k;
scanf("%d",&k);
find(k);
}
return 0;
}