D0000 @ 2023-11-11 10:37:02
#include<cstdio>
#include<algorithm>
#include<cmath>
struct node{
long long x,y;
}a[400005],b[400005],ss[400005];
long long ans=(long long)(2e14);
int n;
bool cmp(node x,node y){
return x.x<y.x;
}
long long min(long long x,long long y){
return x>y?y:x;
}
long long abs(long long x){
return x>-x?x:-x;
}
void gb(int l,int r){
if(l==r)return;
int mid=(l+r)>>1;
gb(l,mid);gb(mid+1,r);
int i=l,j=mid+1,cnt=0,k=l;
while(i<=mid||j<=r){
int now;
if(i>mid)now=j++;
else if(j>r)now=i++;
else if(a[i].y<a[j].y)now=i++;
else now=j++;
ss[k].x=a[now].x;
ss[k++].y=a[now].y;
if((fabs(a[mid].x-a[now].x)<sqrt(ans)*28))b[++cnt].x=a[now].x,b[cnt].y=a[now].y;
}
for(int i=l;i<=r;i++)a[i].x=ss[i].x,a[i].y=ss[i].y;
for(int i=1;i<cnt;i++){
for(int j=i+1;j<=cnt&&b[j].y-b[i].y<sqrt(ans);j++){
ans=min(ans,(b[j].x-b[i].x)*(b[j].x-b[i].x)+(b[j].y-b[i].y)*(b[j].y-b[i].y));
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lld%lld",&a[i].x,&a[i].y);
std::sort(a+1,a+n+1,cmp);
gb(1,n);printf("%lld",(ans));
}