0pts求助
查看原帖
0pts求助
1126733
lxc129楼主2024/5/6 22:13
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100001],b,ans,le,up,mi;
int find_low(int l,int r,int x){
	int L=l,R=r,mid,ans=-1;
	while (L<=R){
		mid=(L+R)/2;
		if (a[mid]<x){
			ans=a[mid];
			L=mid+1;
		}
		else R=mid-1;
	}
	return ans;
}
int find_upp(int l,int r,int x){
	int L=l,R=r,mid,ans=-1;
	while (L<=R){
		mid=(L+R)/2;
		if (a[mid]>x){
			ans=a[mid];
			R=mid-1;
		}
		else L=mid+1;
	}
	return ans;
}
int find_equ(int l,int r,int x){
	int L=l,R=r,mid,ans=-1;
	while (L<=R){
		mid=(L+R)/2;
		if (a[mid]==x){
			ans=a[mid];
			R=mid-1;
		}
		else L=mid+1;
	}
	return ans;
}
int main(){
	cin>>m>>n;
	for (int i=1;i<=m;i++) cin>>a[i];
	sort(a+1,a+m+1);
	while (n--){
		cin>>b;
		le=find_low(1,m,b);
		up=find_upp(1,m,b);
		mi=find_equ(1,m,b);
		if (mi==-1){
			if (le==-1) ans+=up-b;
			else if (up==-1) ans+=b-le;
			else ans+=min(up-b,b-le);
		}
	}
	cout<<ans;
}
2024/5/6 22:13
加载中...