#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int m, n;
long long a[100005], b[100005];
long long int ans;
int search(int l, int r, int x) {
while(l<r) {
int mid=(l+r)/2;
if(a[mid]>=x) r=mid;
else l=mid+1;
}
return r;
}
int main() {
cin>>m>>n;
for(int i=1; i<=m; i++) cin>>a[i];
for(int i=1; i<=n; i++) cin>>b[i];
sort(a+1, a+n+1);
for(int i=1; i<=n; i++) {
int zy;
zy=search(1, m+1, b[i]);
int p, q;
p=abs(a[zy]-b[i]); q=abs(a[zy-1]-b[i]);
ans+=min(p,q);
}
cout<<ans;
return 0;
}
只对了一个点,二分用的是前插。
不太理解为什么错,求助