DCzzy @ 2024-12-17 20:10:47
#include<bits/stdc++.h>
#define ll long long
#define IO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
int a[1000000],b[1000000];
ll n,k;
ll mid=(1+n)/2;
ll sum=0;
int main()
{
IO
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=k;i++)
{
cin>>b[i];
}
for (int i=1;i<=k;i++)
{
for (int j=mid;j<=n;j++)
{
if (b[i]>a[j])
{
mid/=2;
}
if (b[i]==a[j]&&b[i]!=INT_MAX)
{
cout<<i<<' ';
sum=0;
b[i]=INT_MAX;
}
if (b[i]<a[j])
{
mid+=mid/2;
}
if (b[i]!=a[j])
{
sum++;
}
if (b[i]!=a[j]&&sum==n&&b[i]!=INT_MAX)
{
cout<<-1<<' ';
}
}
}
return 0;
}
by xk2013 @ 2024-12-17 20:22:30
@DCzzy 兄弟二分不是这么写的。
by DCzzy @ 2024-12-17 20:24:55
@xk2013 怎么写awa 刚学二分 关注了
by xk2013 @ 2024-12-17 20:27:18
@DCzzy
想偷懒的话可以直接用 STL 里的 lower_bound
或 upper_bound
。
前面那个是查找