方法1
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
long long ans=0;
int m,n;
int main(){
cin>>m>>n;
for(int i=0;i<m;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
sort(a,a+m);
for(int i=0;i<n;i++){
if(a[0]>=b[i]) ans+=a[0]-b[i];
else if(a[m-1]<=b[i]) ans+=b[i]-a[m-1];
else {
int t=lower_bound(a,a+m,b[i])-a;
ans+=min(a[t]-b[i],b[i]-a[t-1]);
}
}
cout<<ans;
return 0;
}
方法2
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
long long ans=0;
int m,n;
int find(int x)
{
int l=0,r=m;
while(l<r){
int mid=(l+r)/2;
if(a[mid]==x) return 0;
else if(a[mid]<x&&a[mid+1]>=x) return min(x-a[mid],a[mid+1]-x);
else if (a[mid]>x) r=mid;
else if(a[mid]<x) l=mid+1;
}
}
int main(){
cin>>m>>n;
for(int i=0;i<m;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
sort(a,a+m);
for(int i=0;i<n;i++){
if(a[0]>=b[i]) ans+=a[0]-b[i];
else if(a[m-1]<=b[i]) ans+=b[i]-a[m-1];
else {
ans+=find(b[i]);
}
}
cout<<ans;
return 0;
}