关于简单的二分
这里是题目
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1000000;
int n,m,a[N],x,b[N];
int findnum(int x)
{ int l=1,r=n,mid;
while(l<r) {
mid=(l+r)/2;
if(a[mid]>=x)
r=mid;
else
l=mid+1;//该种二分用于查找左端点,即第一个大于等于x的数; }
/* while(l<r) {
mid=(r+l)/2;
if(a[mid]==x)
return mid;
else if(a[mid]>x)
r=mid-1;
else
r=mid+1; }*/ //普通的二分;
if(a[l]==x)
return l;
else
return -1;}
int main(){
cin>>n>>m;
for(int i=1; i<=n; i++)
cin>>a[i];
for(int i=0; i<m; i++)
cin>>b[i];
for(int i=0; i<m; i++)
{ int sum=findnum(b[i]);
if(i==m-1)
cout<<sum<<endl;
else
cout<<sum<<" ";
}
return 0;}