解题1 ,使用lower_bound进行查找
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const int N = 1e6+9;
int arr[N];
ll q,m,n;
int main()
{
ios::sync_with_stdio(0),cout.tie(0),cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;++i)
{
cin>>arr[i];
}
while(m--)
{
cin>>q;
int num = lower_bound(arr+1,arr+n+1,q)-arr;
if(arr[num]==q)
cout<<num<<' ';
else
cout<<-1<<' ';
}
return 0;
}
解题2,手打二分查找
#include<iostream>
using namespace std;
typedef long long ll;
const int N = 1e6+9;
int arr[N];
ll q,m,n;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
{
cin>>arr[i];
}
while(m--)
{
cin>>q;
ll left=1,right=n;
while(left < right)
{
ll mid = left + (right-left)/2;
if(arr[mid] >= q)
right = mid;
else
left = mid+1;
}
if(arr[left]==q)
cout<<left<<' ';
else
cout<<-1<<' ';
}
return 0;
}