代码
#include <bits/stdc++.h>
#define min(x,y) (x)<(y)?(x):(y)
#define int long long
using namespace std;
const int N=4e5+10;
struct node
{
int x, y;
double kx,ky;
}x[N],a[N];
inline double dis(node a,node b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
inline bool cmpx(node a,node b)
{
return a.x<b.x;
}
int n;
inline bool cmpy(node a,node b)
{
return a.y<b.y;
}
inline double dfs(int l,int r)
{
if (l>=r)
{
return 1e18;
}
register int mid=(l+r)>>1;
double ans=min(dfs(l,mid),dfs(mid+1,r));
int cnt=0;
for (register int i=l;i<=r;++i)
{
if (abs(a[i].x-a[mid].x)<=ans)
{
x[++cnt]=a[i];
}
}
stable_sort(x+1,x+cnt+1,cmpy);
for (register int i=1;i<=cnt;++i)
{
for (register int j=i+1;j<=cnt;++j)
{
if(abs(x[j].y-x[i].y)>=ans) break;
ans=min(ans,dis(x[i],x[j]));
}
}
return ans;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n;
for (register int i=1;i<=n;++i)
{
cin >> a[i].x >> a[i].y;
}
stable_sort(a+1,a+n+1,cmpx);
double k=dfs(1,n);
printf("%.0lf",k*k);
return 0;
}