谁可以帮我优化一下QWQ 会关注

P2249 【深基13.例1】查找

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_boundupper_bound

前面那个是查找 \ge 要查找的数的,后面是 >,如果找不到会返回最后一个数的地址 {} + 1


|