Cho n điểm phân biệt trên mặt phẳng tọa độ. Với hai điểm P=(x1,y1) và Q=(x2,y2), bình phương khoảng cách Euclid giữa chúng là
dist2(P,Q)=(x1−x2)2+(y1−y2)2.
Hãy tìm giá trị nhỏ nhất của biểu thức trên trong tất cả các cặp điểm phân biệt.
Input
Dòng đầu chứa số nguyên n.
n dòng tiếp theo, mỗi dòng chứa hai số nguyên xi,yi là tọa độ của điểm thứ i.
Output
In một số nguyên là bình phương khoảng cách Euclid nhỏ nhất giữa hai điểm bất kỳ.
Constraints
2≤n≤2⋅105.
−109≤xi,yi≤109.
Mọi điểm đôi một phân biệt.
Scoring
Subtask 1 (50 điểm): n≤2000.
Subtask 2 (50 điểm): không có giới hạn bổ sung.
Example
Test 1
Input
5
0 0
7 7
3 4
10 1
4 4
Output
1
Giải thích: Hai điểm (3,4) và (4,4) cách nhau một đơn vị, nên bình phương khoảng cách bằng 1 và không thể có giá trị dương nhỏ hơn.
Lời giải tóm tắt
Ý tưởng: Sắp các điểm theo hoành độ và dùng chia để trị. Với một đoạn điểm, ta giải hai nửa rồi trộn chúng theo tung độ. Gọi d là bình phương khoảng cách tốt nhất trong hai nửa; mọi cặp tốt hơn nối hai nửa phải có cả hai điểm cách đường chia một khoảng có bình phương nhỏ hơn d.
Ý tưởng: Ta đưa các điểm đó vào một dải đã tăng theo tung độ. Với mỗi điểm, chỉ cần xét các điểm tiếp theo cho đến khi bình phương hiệu tung độ đạt d. Lập luận đóng gói trong các ô vuông cho biết tổng số cặp được xét ở mỗi tầng là tuyến tính.
Ý tưởng: Cần lưu hoành độ đường chia trước khi hai nửa bị trộn theo tung độ. Mọi phép bình phương được thực hiện bằng __int128; kết quả tối đa vẫn được in dưới dạng số nguyên.
Ý tưởng: Độ phức tạp là O(nlogn) thời gian và O(n) bộ nhớ.