本文最后更新于 148 天前,其中的信息可能已经有所发展或是发生改变。
二分是一种在有序数组中快速查找指定元素的的方法
//用二分法从a数组中找一个元素k左右边界,没有就输出-1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
int k;
cin>>k;
int l=0,r=n-1,ll=-1,rr=-1;
/*--------------------------------------------------------------*/
while(l<=r){//找这个元素的左边界
int mid=(l+r)>> 1;
if(a[mid]<k)l=mid+1;
else r=mid;
}
if(a[l]==k)ll=l;
l=0,r=n-1;
/*--------------------------------------------------------------*/
while(l<=r){//找这个元素的右边界
int mid=(l+r+1)>> 1;
if(a[mid]<=k)l=mid;
else r=mid-1;
}
if(a[l]==k)rr=l;
if(ll!=-1&&rr!=-1)cout<<ll<<" "<<rr<<endl;
else cout<<"-1\n";
return 0;
}