26pts
查看原帖
26pts
365296
koobee楼主2023/4/22 11:20

26pts

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
long long n, d=2e14;
struct node{
	int x, y;
} a[N], b[N], c[N];
bool cmp(node x, node y){
	return x.x < y.x;
}
bool cnp(node x, node y){
	return x.y < y.y;
}
long long dis(int a, int b, int c, int d){
	return 1ll * (a-c) * (a-c) + 1ll * (b-d) * (b-d);
}
long long merge(int l, int r){
	if(l == r) return d;
	int mid = (l + r) / 2, cnt = 0, x = l, y = mid + 1, v = a[mid].x, sz = l-1;
	d = min(d, min(merge(l, mid), merge(mid+1, r)));
	while(x <= mid && y <= r){
		if(a[x].y <= a[y].y) c[++sz] = a[x++];
		else c[++sz] = a[y++];
	}
	for(int k = x; k <= mid; k++) c[++sz] = a[k];
	for(int k = y; k <= r; k++) c[++sz] = a[k];
	for(int k = l; k <= r; k++) a[k] = c[k];
	for(int i = l; i <= r; i++)
		if(fabs(v - a[i].x) < d)
			b[++cnt] = a[i];
	for(int i = 1; i <= cnt; i++)
		for(int j = i+1; j <= cnt && b[j].y - b[i].y < d; j++)
			d = min(d, dis(b[i].x, b[i].y, b[j].x, b[j].y));
	return d;
}
int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>n;
	for(int i = 1; i <= n; i++) cin>>a[i].x>>a[i].y;
	sort(a+1, a+1+n, cmp);
	cout<<merge(1, n);
	return 0;
}
2023/4/22 11:20
加载中...