#pragma comment(linker, "/STACK:60777216") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long double ld; typedef long long ll; typedef pair pii; typedef pair pdd; typedef vector vi; typedef vector vd; typedef pair pl; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define SORT(v) sort((v).begin(),(v).end()) #define UN(v) SORT(v),(v).erase(unique((v).begin(),(v).end()),(v).end()) #define CL(a,b) memset(a,b,sizeof a) #define pb push_back int n,m,k; int x[111111]; int y[111111]; vi xx,yy; const int st = 131072; set v[2*st]; void init(int x,int y){ x+=st; while(x){ v[x].insert(y); x>>=1; } } bool hasVal(int pos, int y1,int y2){ set::iterator it=v[pos].lower_bound(y1); return it!=v[pos].end() && *it<=y2; } bool good(int i, int d){ int fromx = xx[x[i]]-d; int tox = fromx+d+d; fromx=lower_bound(xx.begin(),xx.end(),fromx)-xx.begin(); tox=lower_bound(xx.begin(),xx.end(),tox+1)-xx.begin()-1; fromx+=st; tox+=st; while(fromx<=tox){ if(hasVal(fromx, y[i] - d, y[i]+d)) return true; if(hasVal(tox,y[i]-d,y[i]+d)) return true; fromx=(fromx+1)>>1; tox=(tox-1)>>1; } return false; } int main(){ #ifdef LocalHost freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); #endif #ifndef LocalHost freopen("robot.in","r",stdin); freopen("robot.out","w",stdout); #endif cin>>n>>m>>k; REP(i,k)scanf("%d %d",x+i,y+i),xx.pb(x[i]),yy.pb(y[i]); UN(xx);UN(yy); REP(i,k){ x[i]=lower_bound(xx.begin(),xx.end(),x[i])-xx.begin(); // y[i]=lower_bound(yy.begin(),yy.end(),y[i])-yy.begin(); } int res = 1e9+13; REP(i,k){ int from = 1; int to = res - 1; while(from<=to){ int s = (from+to)>>1; if(good(i,s)) res=s,to=s-1; else from=s+1; } init(x[i],y[i]); } cout<