二分查找应用
求最小值
#include <bits/stdc++.h>
using namespace std;
int a[100010];
int lower_bound(int l,int r,int k)
{
while(l<r)
{
int mid=(l+r)/2;
if(a[mid]>=k)
{
r=mid;
}
else
{
l=mid+1;
}
}
if(a[l]==k) return l;
else return -1;
}
int upper_bound(int l,int r,int k)
{
while(l<r)
{
int mid=(l+r+1)/2;
if(a[mid]<=k)
{
l=mid;
}
else
{
r=mid-1;
}
}
if(a[l]==k) return l;
else return -1;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
while(m--){
int k;
cin>>k;
int l=lower_bound(0,n-1,k);
int r=upper_bound(0,n-1,k);
printf("%d %d\n",l,r);
}
return 0;
}