核心思路:二分查找
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100005],b[100005];
int n,m;
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<m;i++) scanf("%d",&b[i]);
sort(a,a+n);//排序
long long tot=0;
for(int i=0;i<m;i++){
int zuo=0,you=n-1,ans=1<<30,now=0;
while(zuo<=you){
int c=(zuo+you)/2;
if(a[c]<b[i]){
ans=min(ans,b[i]-a[c]);//找最小绝对值
zuo=c+1;
}
else{
you=c-1;
ans=min(ans,a[c]-b[i]);
}
}
tot+=ans;//记录最小绝对值
}
printf("%lld",tot);
}
okk