这道题主要是使用二分写,首先输入一个a数组,然后排序,运用二分查找,再累加
在查找时,我们应把左右两端点都枚举一遍
#include<bits/stdc++.h>
using namespace std;
long long a[100005];
int main(){
long long n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
a[0]=INT_MIN;
a[n+1]=INT_MAX;
long long ans=0;
for(int i=1;i<=m;i++){
long long x;
cin>>x;
long long l=0,r=n+1;
while(l+1<r){
long long mid=(l+r)/2;
if(a[mid]<x) l=mid;
else r=mid;
}
ans+=min(abs(a[r]-x),abs(a[l]-x));
}
cout<<ans;
return 0;
}