https://www.saowen.com/a/b932190a4724dc877aeaa3c8e8dfd5abacb402e661d9472f06d1bf0590cd8ee6

#include <cstdio>
#include <algorithm>
#include <cstring>
#define MN 20005
#define INF 0x3FFFFFFF
using namespace std;
struct node{int x,y;}a[MN];
int b[MN];
int bin,n,L,R;

inline int read()
{
    int n=0,f=1; char c=getchar();
    while (c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
    while (c>='0' && c<='9') {n=n*10+c-'0'; c=getchar();}
    return n*f;
}

bool cov(int len)
{
    if (!bin) return true;
    register int i,lm,rm,dm,um;
    lm=dm=INF; rm=um=-INF;
    for (i=1;i<=bin;++i)
        lm=min(lm,a[b[i]].x),rm=max(rm,a[b[i]].x),
        dm=min(dm,a[b[i]].y),um=max(um,a[b[i]].y);
    for (i=1;i<=bin;++i)
        if (!(a[b[i]].x<=lm+len&&a[b[i]].y<=dm+len
            ||a[b[i]].x>=rm-len&&a[b[i]].y>=um-len)) break;
    if (i>bin) return true;
    for (i=1;i<=bin;++i)
        if (!(a[b[i]].x<=lm+len&&a[b[i]].y>=um-len
            ||a[b[i]].x>=rm-len&&a[b[i]].y<=dm+len)) break;
    if (i>bin) return true;
    return false;
}

void del(int lm,int dm,int rm,int um)
{
    register int i;
    for (bin=0,i=1;i<=n;++i)
        if (a[i].x<lm||a[i].x>rm||a[i].y<dm||a[i].y>um) b[++bin]=i;
}

int main()
{
    register int i,lm,rm,dm,um;
    lm=dm=INF; rm=um=-INF;
    n=read();
    for (i=1;i<=n;++i)
        a[i].x=read(),a[i].y=read(),
        lm=min(lm,a[i].x),rm=max(rm,a[i].x),
        dm=min(dm,a[i].y),um=max(um,a[i].y);
    L=0; R=max(um-dm,rm-lm);
    while (L<R)
    {
        int mid=L+R>>1;
        for (i=1;i<=4;++i)
        {
                 if (i==1) del(lm,dm,lm+mid,dm+mid);
            else if (i==2) del(lm,um-mid,lm+mid,um);
            else if (i==3) del(rm-mid,dm,rm,dm+mid);
            else if (i==4) del(rm-mid,um-mid,rm,um);
            if (cov(mid)) break;
        }
        if (i<=4) R=mid; else L=mid+1;
    }
    printf("%d",L);
}

results matching ""

    No results matching ""