1 条题解

  • 0
    @ 2025-10-8 16:51:34

    手工二分:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[N];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        a[0]=-2e9;
        a[++n]=2e9;
        int q;scanf("%d",&q);
        while(q--)
        {
            int x;scanf("%d",&x);
            int l=1,r=n+1;
            while(l+1<r)
            {
                int mid=(l+r)>>1;
                if(a[mid]<=x)l=mid;
                else         r=mid;
            }
            if(x-a[l]<=a[l+1]-x)printf("%d\n",a[l]);else printf("%d\n",a[l+1]);
        }
        return 0;
    }
    

    STL二分:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[N];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        a[0]=-2e9;
        a[++n]=2e9;
        int q;scanf("%d",&q);
        while(q--)
        {
            int x;scanf("%d",&x);
            int p=lower_bound(a,a+n+1,x)-a;
            if(x-a[p-1]<=a[p]-x)printf("%d\n",a[p-1]);else printf("%d\n",a[p]);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    279
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    561
    已通过
    121
    上传者