#include #include #include #include #include #include #include #include using namespace std; #define pb push_back #define mp make_pair #define F first #define S second const int N=100005; typedef long long LL; pair p[N]; int idx[N]; int a[N]; inline double sqr(double x) { return x * x; } double inline dis(int a, int b) { return sqrt(sqr(p[a].F - p[b].F) + sqr(p[a].S - p[b].S)); } bool cmpx(const int &a,const int &b) { return p[a].F < p[b].F; } bool cmpy(const int &a,const int &b) { return p[a].S < p[b].S; } struct Node { int x,y; double d; }; Node find(int l, int r) { if (l == r - 1) { Node ans; ans.x=idx[l]; ans.y=idx[r]; ans.d=dis(ans.x,ans.y); return ans; } if (l == r - 2) { Node dq1,dq2,dq3; dq1.x=idx[l];dq1.y=idx[l+1]; dq2.x=idx[l];dq2.y=idx[l+2]; dq3.x=idx[l+1];dq3.y=idx[l+2]; dq1.d=dis(dq1.x,dq1.y); dq2.d=dis(dq2.x,dq2.y); dq3.d=dis(dq3.x,dq3.y); if (dq1.d> 1; Node dq1,dq2,t; dq1=find(l,mid); dq2=find(mid+1,r); if (dq1.d= t.d) break; dq1.x=a[i];dq1.y=a[j]; dq1.d=dis(dq1.x,dq1.y); if (dq1.d