#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e5 + 5;
// Nhận xét: Với khoảng cách d càng lớn thì vị trí của d trong dãy sau khi sort càng lớn
// => Tìm kiếm nhị phân khoảng cách d đầu tiên có vị trí >= k
// Vị trí của d = (Số cặp (i, j) sao cho dist(i, j) <= d), với dist(i, j) là khoảng cách giữa 2 ngôi nhà i, j
// Nhận xét: dist(i, j) = max(|x(i) - x(j)|, |y(i) - y(j)|) hay còn gọi là khoảng cách Chebyshev
// dist(i, j) <= d <=> max(|x(i) - x(j)|, |y(i) - y(j)|) <= d
// <=> |x(i) - x(j)| <= d và |y(i) - y(j)| <= d
// Do đó để đơn giản hơn cho việc tính toán vị trí của d thì ta sẽ sort lại toạ độ của các ngôi nhà theo x
// Khi xét đến ngôi nhà thứ i, ta sẽ đếm xem có bao nhiêu ngôi nhà j > i sao cho dist(i, j) <= d
// Vì các ngôi nhà đã được sort lại theo x nên lúc này |x(i) - x(j)| = x(j) - x(i)
// Để x(j) - x(i) <= d thì x(j) <= x(i) + d
// Nên với mỗi i, cần tìm j xa nhất thoả mãn x(j) <= x(i) + d, tạm gọi là rj
// Lúc này cần đếm xem có bao nhiêu chỉ số j thuộc [i + 1, rj]
// sao cho |y(i) - y(j)| <= d <=> y(j) thuộc đoạn [y(i) - d, y(i) + d]
// => Có thể áp dụng kĩ thuật 2 con trỏ và duy trì thêm 1 CTDL như BIT trong quá trình duyệt
struct Point {
int x, y;
bool operator<(const Point& other) const {
return x < other.x;
}
};
struct Fenwick {
int n;
vector<int> ft;
Fenwick(int n): n(n) {
ft.resize(n, 0);
}
void update(int pos, int val) {
for (; pos < n; pos = pos | (pos + 1)) ft[pos] += val;
}
int get(int pos) {
int ans = 0;
for (; pos >= 0; pos = (pos & (pos + 1)) - 1) ans += ft[pos];
return ans;
}
};
int n; ll k;
Point a[N];
vector<int> vals; // Danh sách những giá trị cần nén
// Giá trị nén của x
int getIdx(int x) {
return lower_bound(vals.begin(), vals.end(), x) - vals.begin();
}
bool check(ll d) {
Fenwick fenw(vals.size());
ll pos = 0;
for (int i = 1, j = 0; i <= n; i++) {
// j xa nhất thoả mãn a[j].x <= a[i].x + d
while (j + 1 <= n && a[j + 1].x <= a[i].x + d) {
j++;
int u = getIdx(a[j].y);
fenw.update(u, 1);
}
// Đếm số lượng j thoả mãn a[j].y thuộc đoạn [a[i].y - d, a[i].y + d]
// Giá trị nén của phần tử lớn nhất < a[i].y - d
int l = lower_bound(vals.begin(), vals.end(), a[i].y - d) - vals.begin() - 1;
// Giá trị nén của phần tử lớn nhất <= a[i].y + d
int r = upper_bound(vals.begin(), vals.end(), a[i].y + d) - vals.begin() - 1;
pos += fenw.get(r) - fenw.get(l);
pos -= 1; // Trừ trường hợp j = i
int u = getIdx(a[i].y);
fenw.update(u, -1);
}
return (pos >= k);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i].x >> a[i].y;
vals.push_back(a[i].y);
}
sort(a + 1, a + n + 1);
sort(vals.begin(), vals.end());
vals.resize(unique(vals.begin(), vals.end()) - vals.begin());
ll l = 0, r = 2e9, ans = -1;
while (l <= r) {
ll mid = (l + r) >> 1;
if (check(mid)) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCi8vIE5o4bqtbiB4w6l0OiBW4bubaSBraG/huqNuZyBjw6FjaCBkIGPDoG5nIGzhu5tuIHRow6wgduG7iyB0csOtIGPhu6dhIGQgdHJvbmcgZMOjeSBzYXUga2hpIHNvcnQgY8OgbmcgbOG7m24KLy8gPT4gVMOsbSBraeG6v20gbmjhu4sgcGjDom4ga2hv4bqjbmcgY8OhY2ggZCDEkeG6p3UgdGnDqm4gY8OzIHbhu4sgdHLDrSA+PSBrIAovLyBW4buLIHRyw60gY+G7p2EgZCA9IChT4buRIGPhurdwIChpLCBqKSBzYW8gY2hvIGRpc3QoaSwgaikgPD0gZCksIHbhu5tpIGRpc3QoaSwgaikgbMOgIGtob+G6o25nIGPDoWNoIGdp4buvYSAyIG5nw7RpIG5ow6AgaSwgagovLyBOaOG6rW4geMOpdDogZGlzdChpLCBqKSA9IG1heCh8eChpKSAtIHgoail8LCB8eShpKSAtIHkoail8KSBoYXkgY8OybiBn4buNaSBsw6Aga2hv4bqjbmcgY8OhY2ggQ2hlYnlzaGV2Ci8vIGRpc3QoaSwgaikgPD0gZCA8PT4gbWF4KHx4KGkpIC0geChqKXwsIHx5KGkpIC0geShqKXwpIDw9IGQgCi8vICAgICAgICAgICAgICAgICA8PT4gfHgoaSkgLSB4KGopfCA8PSBkIHbDoCB8eShpKSAtIHkoail8IDw9IGQKLy8gRG8gxJHDsyDEkeG7gyDEkcahbiBnaeG6o24gaMahbiBjaG8gdmnhu4djIHTDrW5oIHRvw6FuIHbhu4sgdHLDrSBj4bunYSBkIHRow6wgdGEgc+G6vSBzb3J0IGzhuqFpIHRv4bqhIMSR4buZIGPhu6dhIGPDoWMgbmfDtGkgbmjDoCB0aGVvIHgKLy8gS2hpIHjDqXQgxJHhur9uIG5nw7RpIG5ow6AgdGjhu6kgaSwgdGEgc+G6vSDEkeG6v20geGVtIGPDsyBiYW8gbmhpw6p1IG5nw7RpIG5ow6AgaiA+IGkgc2FvIGNobyBkaXN0KGksIGopIDw9IGQKLy8gVsOsIGPDoWMgbmfDtGkgbmjDoCDEkcOjIMSRxrDhu6NjIHNvcnQgbOG6oWkgdGhlbyB4IG7Dqm4gbMO6YyBuw6B5IHx4KGkpIC0geChqKXwgPSB4KGopIC0geChpKQovLyDEkOG7gyB4KGopIC0geChpKSA8PSBkIHRow6wgeChqKSA8PSB4KGkpICsgZAovLyBOw6puIHbhu5tpIG3hu5dpIGksIGPhuqduIHTDrG0gaiB4YSBuaOG6pXQgdGhv4bqjIG3Do24geChqKSA8PSB4KGkpICsgZCwgdOG6oW0gZ+G7jWkgbMOgIHJqCi8vIEzDumMgbsOgeSBj4bqnbiDEkeG6v20geGVtIGPDsyBiYW8gbmhpw6p1IGNo4buJIHPhu5EgaiB0aHXhu5ljIFtpICsgMSwgcmpdIAovLyBzYW8gY2hvIHx5KGkpIC0geShqKXwgPD0gZCA8PT4geShqKSB0aHXhu5ljIMSRb+G6oW4gW3koaSkgLSBkLCB5KGkpICsgZF0KLy8gPT4gQ8OzIHRo4buDIMOhcCBk4bulbmcga8SpIHRodeG6rXQgMiBjb24gdHLhu48gdsOgIGR1eSB0csOsIHRow6ptIDEgQ1RETCBuaMawIEJJVCB0cm9uZyBxdcOhIHRyw6xuaCBkdXnhu4d0IApzdHJ1Y3QgUG9pbnQgewoJaW50IHgsIHk7ICAKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IFBvaW50JiBvdGhlcikgY29uc3QgewoJCXJldHVybiB4IDwgb3RoZXIueDsgCgl9Cn07IAoKc3RydWN0IEZlbndpY2sgewoJaW50IG47IAoJdmVjdG9yPGludD4gZnQ7ICAKCglGZW53aWNrKGludCBuKTogbihuKSB7CgkJZnQucmVzaXplKG4sIDApOyAgCgl9CgoJdm9pZCB1cGRhdGUoaW50IHBvcywgaW50IHZhbCkgewoJCWZvciAoOyBwb3MgPCBuOyBwb3MgPSBwb3MgfCAocG9zICsgMSkpIGZ0W3Bvc10gKz0gdmFsOyAKCX0KCglpbnQgZ2V0KGludCBwb3MpIHsKCQlpbnQgYW5zID0gMDsgICAKCQlmb3IgKDsgcG9zID49IDA7IHBvcyA9IChwb3MgJiAocG9zICsgMSkpIC0gMSkgYW5zICs9IGZ0W3Bvc107IAoJCXJldHVybiBhbnM7ICAKCX0KfTsKCmludCBuOyBsbCBrOyAgClBvaW50IGFbTl07ICAKCnZlY3RvcjxpbnQ+IHZhbHM7IC8vIERhbmggc8OhY2ggbmjhu69uZyBnacOhIHRy4buLIGPhuqduIG7DqW4KCi8vIEdpw6EgdHLhu4sgbsOpbiBj4bunYSB4CmludCBnZXRJZHgoaW50IHgpIHsgCglyZXR1cm4gbG93ZXJfYm91bmQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpLCB4KSAtIHZhbHMuYmVnaW4oKTsgIAp9Cgpib29sIGNoZWNrKGxsIGQpIHsKCUZlbndpY2sgZmVudyh2YWxzLnNpemUoKSk7ICAKCWxsIHBvcyA9IDA7ICAgCglmb3IgKGludCBpID0gMSwgaiA9IDA7IGkgPD0gbjsgaSsrKSB7CgkJLy8gaiB4YSBuaOG6pXQgdGhv4bqjIG3Do24gYVtqXS54IDw9IGFbaV0ueCArIGQKCQl3aGlsZSAoaiArIDEgPD0gbiAmJiBhW2ogKyAxXS54IDw9IGFbaV0ueCArIGQpIHsKCQkJaisrOyAKCQkJaW50IHUgPSBnZXRJZHgoYVtqXS55KTsgCgkJCWZlbncudXBkYXRlKHUsIDEpOyAKCQl9CgkJCgkJLy8gxJDhur9tIHPhu5EgbMaw4bujbmcgaiB0aG/huqMgbcOjbiBhW2pdLnkgdGh14buZYyDEkW/huqFuIFthW2ldLnkgLSBkLCBhW2ldLnkgKyBkXQoJCS8vIEdpw6EgdHLhu4sgbsOpbiBj4bunYSBwaOG6p24gdOG7rSBs4bubbiBuaOG6pXQgPCBhW2ldLnkgLSBkCgkJaW50IGwgPSBsb3dlcl9ib3VuZCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCksIGFbaV0ueSAtIGQpIC0gdmFscy5iZWdpbigpIC0gMTsgCgkJLy8gR2nDoSB0cuG7iyBuw6luIGPhu6dhIHBo4bqnbiB04butIGzhu5tuIG5o4bqldCA8PSBhW2ldLnkgKyBkCgkJaW50IHIgPSB1cHBlcl9ib3VuZCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCksIGFbaV0ueSArIGQpIC0gdmFscy5iZWdpbigpIC0gMTsgCgkJcG9zICs9IGZlbncuZ2V0KHIpIC0gZmVudy5nZXQobCk7IAoJCXBvcyAtPSAxOyAvLyBUcuG7qyB0csaw4budbmcgaOG7o3AgaiA9IGkgIAoKCQlpbnQgdSA9IGdldElkeChhW2ldLnkpOyAKCQlmZW53LnVwZGF0ZSh1LCAtMSk7IAoJfQoJcmV0dXJuIChwb3MgPj0gayk7ICAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG4gPj4gazsgCgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJY2luID4+IGFbaV0ueCA+PiBhW2ldLnk7ICAKCQl2YWxzLnB1c2hfYmFjayhhW2ldLnkpOyAgCgl9CgoJc29ydChhICsgMSwgYSArIG4gKyAxKTsgICAKCQoJc29ydCh2YWxzLmJlZ2luKCksIHZhbHMuZW5kKCkpOyAgCgl2YWxzLnJlc2l6ZSh1bmlxdWUodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKSAtIHZhbHMuYmVnaW4oKSk7ICAKCglsbCBsID0gMCwgciA9IDJlOSwgYW5zID0gLTE7ICAKCXdoaWxlIChsIDw9IHIpIHsKCQlsbCBtaWQgPSAobCArIHIpID4+IDE7IAoKCQlpZiAoY2hlY2sobWlkKSkgewoJCQlhbnMgPSBtaWQ7IAoJCQlyID0gbWlkIC0gMTsgCgkJfQoJCWVsc2UgewoJCQlsID0gbWlkICsgMTsgCgkJfQoJfQoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9