https://www.luogu.com.cn/problem/P2249
方法一:二分手写模板
#include<bits/stdc++.h>
using namespace std;
int n, m, a[1000005], q;
int seach(int x){
int ret=-1;
int l=1, r=n;
while(l<=r){
int mid=r-(r-l)/2;
if(a[mid]==x){
ret=mid;
r=mid-1;
}
else if(a[mid]>x)r=mid-1;
else l=mid+1;
}
return ret;
}
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
cin>>a[i];
while(m--){
cin>>q;
cout<<seach(q)<<" ";
}
return 0;
}
方法二:STL之lower_bound练习
#include<bits/stdc++.h>
using namespace std;
int n, m, a[1000005], q;
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
cin>>a[i];
while(m--){
cin>>q;
int ans=lower_bound(a+1, a+1+n, q)-a;
ans=a[ans]==q?ans:-1;//判断是否相等,不相等说明是不存在的
cout<<ans<<" ";
}
return 0;
}