#include<stdio.h>
#include<sstream>
#include <map>
#include <iostream>
#include <math.h>
using namespace std;
#define N 5;
#define M 5000;
typedef struct Point
{
int x;
int y;
} Point;
Point P[50] ;
int GetNearest(int i,int j)
{
if(i==j-1)
{
return (P[i].x-P[j].x)*(P[i].x-P[j].x)+(P[i].y-P[j].y)*(P[i].y-P[j].y);
}
else
{
int mid=(i+j)/2;
int n1,n2;
if(i<mid)
{
n1=GetNearest(i,mid);
}
else
{
n1=M;
}
if(j>mid+1)
{
n2=GetNearest(mid+1,j);
}
else
{
n2=M;
}
int min=n1;
if(n2<n1)
{
min=n2;
}
for(int k=i;k<=mid;k++)
{
if(P[k].x>=P[mid].x-n1)
{
for(int l=mid+1;l<=j;l++)
{
if(P[l].x<=P[mid].x+n1)
{
int dis=(P[i].x-P[j].x)*(P[i].x-P[j].x)+(P[i].y-P[j].y)*(P[i].y-P[j].y);
if(dis<min)
{
min=dis;
}
}
}
}
}
return min;
}
}
void main()
{
for(int i=0;i<50;i++)
{
P[i].x=i;
P[i].y=2*i;
}
P[5].x=5;
P[5].y=9;
int mindis=GetNearest(0,49);
}
#include<sstream>
#include <map>
#include <iostream>
#include <math.h>
using namespace std;
#define N 5;
#define M 5000;
typedef struct Point
{
int x;
int y;
} Point;
Point P[50] ;
int GetNearest(int i,int j)
{
if(i==j-1)
{
return (P[i].x-P[j].x)*(P[i].x-P[j].x)+(P[i].y-P[j].y)*(P[i].y-P[j].y);
}
else
{
int mid=(i+j)/2;
int n1,n2;
if(i<mid)
{
n1=GetNearest(i,mid);
}
else
{
n1=M;
}
if(j>mid+1)
{
n2=GetNearest(mid+1,j);
}
else
{
n2=M;
}
int min=n1;
if(n2<n1)
{
min=n2;
}
for(int k=i;k<=mid;k++)
{
if(P[k].x>=P[mid].x-n1)
{
for(int l=mid+1;l<=j;l++)
{
if(P[l].x<=P[mid].x+n1)
{
int dis=(P[i].x-P[j].x)*(P[i].x-P[j].x)+(P[i].y-P[j].y)*(P[i].y-P[j].y);
if(dis<min)
{
min=dis;
}
}
}
}
}
return min;
}
}
void main()
{
for(int i=0;i<50;i++)
{
P[i].x=i;
P[i].y=2*i;
}
P[5].x=5;
P[5].y=9;
int mindis=GetNearest(0,49);
}