#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define make_unique(x) sort(all(x)), x.erase(unique(all(x)), x.end())
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 Rng(chrono::steady_clock::now().time_since_epoch().count());
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int N = 1e5 + 200;
const int M = 1e6;
const int inf = 2e9 + 3;
const ll INF = 1e18;
int n, m, l[N], r[N];
bool check(int D) {
for (int i = 1, j = 1; i <= n; ++i) {
int found = -1;
while (j <= m && abs(l[i] - r[j]) > D) {
j++;
}
if (j == m + 1) {
return false;
}
else {
//l[i] --- r[j]
j++;
}
}
return true;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> l[i];
}
for (int i = 1; i <= m; ++i) {
cin >> r[i];
}
sort(l + 1, l + n + 1);
sort(r + 1, r + m + 1);
if (n > m) {
swap(n, m);
swap(l, r);
}
int L = 0, R = inf, ans = inf;
while (L <= R) {
int M = (L + R) / 2;
if (check(M) == true) { //answer <= M
ans = M;
R = M - 1;
}
else {
L = M + 1;
}
}
cout << ans << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |