#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
bool isCovered(const vector<int>& cities, const vector<int>& towers, long long r) {
int m = towers.size();
for (int city : cities) {
auto it = lower_bound(towers.begin(), towers.end(), city);
bool covered = false;
if (it != towers.end() && *it - city <= r) covered = true;
if (it != towers.begin() && city - *prev(it) <= r) covered = true;
if (!covered) return false;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<int> cities(n), towers(m);
for (int i = 0; i < n; ++i) cin >> cities[i];
for (int i = 0; i < m; ++i) cin >> towers[i];
sort(cities.begin(), cities.end());
sort(towers.begin(), towers.end());
long long left = 0, right = max(
abs(cities.back() - towers.front()),
abs(towers.back() - cities.front())
);
long long ans = right;
while (left <= right) {
long long mid = left + (right - left) / 2;
if (isCovered(cities, towers, mid)) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
cout << ans << endl;
return 0;
}
全AC,记录记录