#include #include #include #include using namespace std; const int maxn = 100010; long long n, k; priority_queue, greater > q; struct node { long long x, y; } s[maxn]; bool cmp1(node a, node b) { return a.x < b.x; } bool cmp2(node a, node b) { return a.y < b.y; } long long lc[maxn], rc[maxn], L[maxn], R[maxn], D[maxn], U[maxn]; void maintain(int x) { L[x] = R[x] = s[x].x; D[x] = U[x] = s[x].y; if (lc[x]) L[x] = min(L[x], L[lc[x]]), R[x] = max(R[x], R[lc[x]]), D[x] = min(D[x], D[lc[x]]), U[x] = max(U[x], U[lc[x]]); if (rc[x]) L[x] = min(L[x], L[rc[x]]), R[x] = max(R[x], R[rc[x]]), D[x] = min(D[x], D[rc[x]]), U[x] = max(U[x], U[rc[x]]); } int build(int l, int r) { if (l > r) return 0; int mid = (l + r) >> 1; double av1 = 0, av2 = 0, va1 = 0, va2 = 0; // average variance for (int i = l; i <= r; i++) av1 += s[i].x, av2 += s[i].y; av1 /= (r - l + 1); av2 /= (r - l + 1); for (int i = l; i <= r; i++) va1 += (av1 - s[i].x) * (av1 - s[i].x), va2 += (av2 - s[i].y) * (av2 - s[i].y); if (va1 > va2) nth_element(s + l, s + mid, s + r + 1, cmp1); else nth_element(s + l, s + mid, s + r + 1, cmp2); lc[mid] = build(l, mid - 1); rc[mid] = build(mid + 1, r); maintain(mid); return mid; } long long sq(long long x) { return x * x; } long long dist(int a, int b) { return max(sq(s[a].x - L[b]), sq(s[a].x - R[b])) + max(sq(s[a].y - D[b]), sq(s[a].y - U[b])); } void query(int l, int r, int x) { if (l > r) return; int mid = (l + r) >> 1; long long t = sq(s[mid].x - s[x].x) + sq(s[mid].y - s[x].y); if (t > q.top()) q.pop(), q.push(t); long long distl = dist(x, lc[mid]), distr = dist(x, rc[mid]); if (distl > q.top() && distr > q.top()) { if (distl > distr) { query(l, mid - 1, x); if (distr > q.top()) query(mid + 1, r, x); } else { query(mid + 1, r, x); if (distl > q.top()) query(l, mid - 1, x); } } else { if (distl > q.top()) query(l, mid - 1, x); if (distr > q.top()) query(mid + 1, r, x); } } int main() { cin >> n >> k; k *= 2; for (int i = 1; i <= k; i++) q.push(0); for (int i = 1; i <= n; i++) cin >> s[i].x >> s[i].y; build(1, n); for (int i = 1; i <= n; i++) query(1, n, i); cout << q.top() << endl; return 0; }