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;
}