二分对是对了,但结果却和暴力枚举一样(1.20s)
以下代码:
#include<bits/stdc++.h>
using namespace std;
int a[1000005],n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
{
int q,flag=-1,l=1,r=n,mid=(n+1)/2;
cin>>q;
while(l<r)
{
if(a[mid]<q)
l=mid;
else
{
if(a[mid]>q)
r=mid;
else
{
flag=mid;
break;
}
}
mid=(l+r+1)/2;
}
cout<<flag<<" ";
}
return 0;
}