显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 20100
#define ll long long
ll read()
{
ll x,f=1;
char ch;
while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;
x=ch-48;
while(ch=getchar(),isdigit(ch))x=x*10+ch-48;
return x*f;
}
void write(ll x)
{
if(x<0)x=-x,putchar('-');
int cnt=0;char ch[50];
while(ch[++cnt]=x%10+48,x/=10);
while(putchar(ch[cnt]),--cnt);
putchar('\n');
}
struct node
{
int x,y;
}a[maxn];
bool com(const node & a,const node & b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
int n,mx[4],mxx[4],mxxx[4],my[4],myy[4],myyy[4],mid;
bool flag[maxn];
bool work()
{//cout<<mid<<endl;
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
mxxx[1]=0,mxxx[2]=0x7f7f7f7f,myyy[1]=0,myyy[2]=0x7f7f7f7f;
for(int k=1;k<=n;k++)
{
if(!flag[k]&&abs(mxx[i]-a[k].x)>mid||abs(myy[j]-a[k].y)>mid)
{
mxxx[1]=max(a[k].x,mxxx[1]);
mxxx[2]=min(a[k].x,mxxx[2]);
myyy[1]=max(a[k].y,myyy[1]);
myyy[2]=min(a[k].y,myyy[2]);
}
//else flag[k]=1;
}
if(mxxx[1]-mxxx[2]<=mid&&myyy[1]-myyy[2]<=mid)
{//cout<<mxxx[1]-mxxx[2]<<' '<<mid<<endl;
return 1;
}
}
}
return 0;
}
int main()
{
freopen("cover.in","r",stdin);
freopen("cover.out","w",stdout);
n=read();mx[1]=0,mx[2]=0x7f7f7f7f,my[1]=0,my[2]=0x7f7f7f7f;
for(int i=1;i<=n;i++)
{
a[i].x=read();a[i].y=read();
mx[1]=max(a[i].x,mx[1]);
mx[2]=min(a[i].x,mx[2]);
my[1]=max(a[i].y,my[1]);
my[2]=min(a[i].y,my[2]);
}
//sort(a+1,a+1+n,com);
int l=1,r=max(mx[1]-mx[2],my[1]-my[2]);//cout<<r<<endl;
while(l<=r)
{
mid=(l+r)>>1;//cout<<mid<<' '<<l<<' '<<r<<endl;
bool fl=0;
for(int i=1;i<=2;i++)
{
bool f=0;
for(int j=1;j<=2;j++)
{memset(flag,0,sizeof flag);
mxx[1]=0,mxx[2]=0x7f7f7f7f,myy[1]=0,myy[2]=0x7f7f7f7f;
for(int k=1;k<=n;k++)
{
if(abs(mx[i]-a[k].x)>mid||abs(my[j]-a[k].y)>mid)
{
mxx[1]=max(a[k].x,mxx[1]);
mxx[2]=min(a[k].x,mxx[2]);
myy[1]=max(a[k].y,myy[1]);
myy[2]=min(a[k].y,myy[2]);
}
else flag[k]=1;
}
if(work())
{
f=1;break;
}
}
if(f==1)
{
fl=1;break;
}
}
if(fl)r=mid-1;
else l=mid+1;
}
write(r+1);//while(1);
// system("pause");
fclose(stdin);
fclose(stdout);
}