题目:
题解:
用两种二分先找第一个x的位置再找第二个x的位置。
代码:
#include<bits/stdc++.h>
using namespace std;
int q[100010];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)scanf("%d",q+i);
while(m--){
int x;
scanf("%d",&x);
int l=0,r=n-1,mid;
while(l<r){
mid=l+r>>1;
if(q[mid]>=x)r=mid;
else l=mid+1;
}
if(q[l]!=x)printf("%d %d\n",-1,-1);
else {
printf("%d ",l);
r=n-1;
while(l<r){
mid=l+r+1>>1;
if(q[mid]<=x)l=mid;
else r=mid-1;
}
printf("%d\n",r);
}
}
}