查找编号
解题思路
讲真的这玩意儿是二分的模板题。
不过YbtOJ给的是倍增的模板,那就是倍增的模板咯。
code
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
int a[2000010]; //这里一定要开大一点,不然在a[ans+(a<<i)]时会数组越界
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
while(m--)
{
int q,ans=0;
scanf("%d",&q);
for(int i=20;i>=0;i--)
if(a[ans+(1<<i)]<q&&ans+(1<<i)<=n)
ans+=(1<<i);
if(a[ans+1]==q)
printf("%d ",ans+1);
else
printf("-1 ");
}
}