问题标题: 酷町堂:2785

0
0

0
已采纳
李博然
李博然
资深守护
资深守护

输入n,m;

输入a数组

排序a数组

循环m次

输入k

二分查找第一个比k大的数

然后判断是a[l]-k小还是k-a[l-1]小

核心:
 

        cin>>k;
        int l=1,r=n;
        while(l<r)
        {
            int mid=(l+r)/2;
            if(a[mid]<=k) l=mid+1;
            else r=mid;
        }
        if(a[1]>k) ans+=a[1]-k;
        else if(a[n]<k) ans+=k-a[n];
        else if(l!=1) ans+=min(k-a[l-1],a[l]-k);
        else ans+=a[l]-k;

求采纳

李博然在2021-07-11 10:03:38追加了内容

最后再输出ans就可ac呐

0
我要回答