#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX_M = 100000;
const int MAX_N = 100000;
// 二分查找最接近学生估分的学校分数线
int binarySearch(int schools[], int m, int score) {
int left = 0, right = m - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (schools[mid] < score) {
left = mid + 1;
} else {
right = mid;
}
}
// 找到最接近的分数线,考虑 left 为 0 和非 0 的情况
int minDiff;
if (left > 0) {
minDiff = min(abs(schools[left] - score), abs(schools[left - 1] - score));
} else {
minDiff = abs(schools[left] - score);
}
return minDiff;
}
int main() {
int m, n;
// 读取学校数量 m 和学生数量 n
cin >> m >> n;
int schools[MAX_M];
// 读取 m 个学校的预计录取分数
for (int i = 0; i < m; i++) {
cin >> schools[i];
}
// 对学校分数线进行排序
sort(schools, schools + m);
int students[MAX_N];
// 读取 n 个学生的估分成绩
for (int i = 0; i < n; i++) {
cin >> students[i];
}
long long totalDissatisfaction = 0;
// 遍历每个学生的估分
for (int i = 0; i < n; i++) {
// 调用二分查找函数找到最接近的分数线,计算不满意度
int minDiff = binarySearch(schools, m, students[i]);
// 累加该学生的不满意度
totalDissatisfaction += minDiff;
}
// 输出最小的不满意度总和
cout << totalDissatisfaction << endl;
return 0;
}
/**************************************************************
Problem: 1899
User: chenjingqi
Language: C++
Result: Accepted
Time:135 ms
Memory:2736 kb
****************************************************************/