【题解】二分法查找左边界
参考代码:
# include <bits/stdc++.h> using namespace std; int a[100005]; int n,m,x; //数组大小,要查找的数大小,每次要查找的数 int main() { // freopen("1.in","r",stdin); // freopen("1.out","w",stdout); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>m; while(m--){ cin>>x; int index=lower_bound(a+1,a+n+1,x)-a; //查找第一个大于等于m的位置 if(index==n+1){ //没找到输出-1 cout<<-1<<" "; }else if(a[index]==x){ //找到了,输出位置 cout<<index<<" "; }else{ //第一个大于但是不等于的情况也输出-1 cout<<-1<<" "; } } return 0; }
(adsbygoogle = window.adsbygoogle || []).push({});