二分边界求助
查看原帖
二分边界求助
1138494
Rcheeseburger楼主2024/3/23 11:18
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 1000010;
ll m, n, a[N], b[N];
int main()
  {
    scanf("%lld%lld", &m, &n);
    for (int i = 1; i <= m; i++)
        scanf("%lld", &a[i]);
    for (int i = 1; i <= n; i++)
        scanf("%lld", &b[i]);
    sort(a + 1, a + m + 1);
    ll ans = 0;
    for (int i = 1; i <= n; i++)
   {
        int l = 1, r = m;
        while (l < r) {
            int mid = (l + r + 1) >> 1;
            if (a[mid] < b[i])
                l = mid;
            else
                r = mid - 1;
        }
        if (l == 0) {
            ans += abs(a[1] - b[i]);
        } else if (l == m) {
            ans += abs(a[m] - b[i]);
        } else {
            ans += min(abs(a[l] - b[i]), abs(a[l + 1] - b[i]));
        }
    }
    printf("%lld\n", ans);
    return 0;
}

我下标从1开始,特判某人分数比所有学校都小时为什么要写if(l==0),l此时不是1吗

2024/3/23 11:18
加载中...