新思路:https://blog.csdn.net/WJPnb1/article/details/126360962?spm=1001.2014.3001.5502
#include<iostream>
using namespace std;
const int N=100010;
int q[N];
int n,k,x;
int main(){
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&q[i]);
}
while(k--){
scanf("%d",&x);
//寻找第一个等于x的坐标,分成<x和>=x的区间
int l=-1,r=n ;
//当l和r没有相接的时候,求边界
while(l+1!=r){
//区间不断缩小(不能写在循环外)
int mid=l+r >>1;
if(q[mid]>=x){
r=mid;
}else{
l=mid;
}
}
//此时得到的是r是第一个>=5的坐标
if(q[r]!=x) printf("-1 -1\n");
else{
printf("%d ",r);
//现在找最后一个<=x的位置,分成<=x和>x的区间
int l=-1,r=n;
while(l+1!=r){
int mid=l+r >>1;
if(q[mid]<=x){
l=mid;
}else{
r=mid;
}
}
printf("%d\n",l);
}
}
return 0;
}