Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const pair<pt, pt> MIN{pt((ll)-1e9 - 1, (ll)-1e9 - 1), pt((ll)1e9 + 1, (ll)1e9 + 1)};
- vector<pt> pts;
- pair<pt, pt> rec(int l, int r) {
- if (r - l <= 10) {
- pair<pt, pt> _min = MIN;
- for (int i = l; i < r; ++i) {
- for (int j = i + 1; j < r; ++j) {
- _min = Min(_min, mp(pts[i], pts[j]));
- }
- }
- return _min;
- }
- int m = (l + r) / 2;
- pair<pt, pt> best1 = rec(l, m);
- pair<pt, pt> best2 = rec(m, r);
- pair<pt, pt> best = Min(best1, best2);
- int st = l, en = r - 1;
- while (pts[m].x - pts[st].x > dist(best)) {
- ++st;
- }
- while (pts[en].x - pts[m].x > dist(best)) {
- --en;
- }
- vector<pt> left, right;
- for (int i = st; i < m; ++i) left.push_back(pts[i]);
- for (int i = m; i <= en; ++i) right.push_back(pts[i]);
- sort(all(left), comp2);
- sort(all(right), comp2);
- int R = m;
- for (int L = st; L < m; ++L) {
- while (R <= en && pts[R].y - pts[L].y <= dist(best)) {
- best = Min(best, mp(pts[L], pts[R]));
- ++R;
- }
- }
- return best;
- }
- int main() {
- int n;
- cin >> n;
- pts.resize(n);
- cin >> pts;
- sort(all(pts), comp1);
- pair<pt, pt> ans = rec(0, n);
- cout << ans.fi << '\n' << ans.se << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement