rt
记得mid是数组里面的
bool binarySearch(int key){ int left=0,right=n,mid;
while(left<right){
mid=(left+right)/2;
if(s[mid]==key) return true;
else if(key<s[mid]) right=mid;
else left=mid+1;
} return false;
}
补充 lower_bound和upper_bound用法 这两个返还值是一个地址,若想知道序号,要先减去数组名.
下面直接放代码.
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int s[1000009];
int main(){ int n,m,i,j,k,ans;cin>>n>>m;
for(i=1;i<=n;i++){ scanf("%d",&s[i]);
}
for(j=1;j<=m;j++){ scanf("%d",&k);ans=lower_bound(s+1,s+1+n,k)-s;
if(k!=s[ans]) cout<<-1<<' '; else cout<<ans<<' ';
}
return 0;}