Rt,但是还是可以过评测,有大佬能解释吗
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a[1000002],b[1000002],ans;
int Find(int i){
int l=0,r=n+1;
a[l]=-1,a[r]=INT_MAX;
while(l+1<r){
int mid=(l+r)/2;
if(a[mid]<b[i]){
l=mid;
}
if(a[mid]>b[i]){
r=mid;
}
if(a[mid]==b[i]){
return 0;
}
}
if(b[i]<=a[1]){
return a[1]-b[i];
}else if(l!=r-1){
return min(abs(b[i]-a[l]),abs(a[r-1]-b[i]));
}
return min(abs(b[i]-a[l]),abs(a[r]-b[i]));
}
main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
for(int i=1;i<=m;i++){
cin>>b[i];
ans+=Find(i);
}
cout<<ans;
return 0;
}