思路:
大于等于查左边界,小于等于查右边界,注意上下取整
(l = mid,mid = l + r + 1 >>1)
代码:
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int main()
{
int n,k;
cin >> n >> k;
for(int i = 0;i < n;i ++) cin >> a[i];
while(k --)
{
int c;
cin >> c;
int res1,res2;
int l = 0,r = n - 1;
while(l < r)
{
int mid = l + r + 1>>1;
if(a[mid] <= c) l = mid;
else r = mid - 1;//右边界
}
res1 = l;
if(a[l] == c)
{
int l = 0,r = n - 1;
while(l < r)
{
int mid = l + r >> 1;
if(a[mid] >= c) r = mid;
else l = mid + 1;
}
res2 = l;
cout<<res2<<" "<<res1<<endl;;
}
else
{
cout<<"-1 -1"<<endl;
}
}
return 0;
}