#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 250'000 + 10;
int n, k;
pair<int, int> p[N];
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> k;
for (int i = 1; i <= n; ++i) {
int x, y; cin >> x >> y;
p[i].first = x - y;
p[i].second = x + y;
}
sort(p + 1, p + n + 1);
vector<int> answer;
multiset<pair<int, int>> s;
auto chk = [&](int mid, bool doTrace) {
s.clear();
int cnt = 0;
for (int i = 1, j = 1; i <= n; ++i) {
const auto& [x, y] = p[i];
for (; x - p[j].first > mid; ++j) s.erase({p[j].second, j});
auto it = s.lower_bound({y - mid, 0});
for (; it != s.end() && it->first <= y + mid; ++it) {
cnt += 1;
if (doTrace) {
int j = it->second;
answer.push_back(max(abs(x - p[j].first), abs(y - p[j].second)));
}
if (!doTrace && cnt == k) return true;
}
s.insert({p[i].second, i});
}
return false;
};
int l = 0, r = 4'000'000'000, ret = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (chk(mid, false)) r = mid - 1, ret = mid;
else l = mid + 1;
}
chk(ret, true);
sort(answer.begin(), answer.end());
for (int i = 0; i < k; ++i) cout << answer[i] << "\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... |