#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll a[2002][2002], b[2002][2002];
int main() {
	ll n, m,can, r, x, y, i, j, ans, t, mid, lo, hi, mn, mx;
	cin >> n >> m;
	
	mn = 1e18;
	mx = 0;
	for (i = 1; i <= n; i ++) {
		for (j = 1; j <= m; j ++) {
			cin >> a[i][j];
			mn = min(mn, a[i][j]);
			mx = max(mx, a[i][j]);
		}
	}
	
	lo = 0;
	hi = 1e9;
	//deed heseg n baga
	while ( lo < hi) {
		mid = (lo + hi)/2;
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= m; j ++) {
				if ( a[i][j] - mn <= mid) b[i][j] = 1;
				else b[i][j] = 0;
			}
		}
		for (i = 1; i <= n; i ++) {
			r = 1;
			while ( r <= m && b[i][r] == 1)  r++;
			while ( r <= m) b[i][r] = 0, r ++;
		}
		for (j = 1; j <= m; j ++) {
			r = 1;
			while ( r <= n && b[r][j] == 1) r ++;
			while ( r <= n) b[r][j] = 0, r ++;
		}
		can = 1;
		for (i = 1; i <= n; i ++) {
			for (j = 1; j <= m; j ++) {
				if ( b[i][j] == 0) {
					if ( abs(mx - a[i][j]) > mid)  can  = 0;
				}
				else {
					if ( abs(mn - a[i][j]) > mid) can = 0;
				}
			}
		}
		if ( can == 0) lo = mid + 1;
		else hi = mid;
	}
	ans = lo;
		lo = 0;
	hi = ans;
	//deed heseg n baga
	while ( lo < hi) {
		mid = (lo + hi)/2;
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= m; j ++) {
				if ( mx  - a[i][j] <= mid) b[i][j] = 1;
				else b[i][j] = 0;
			}
		}
		for (i = 1; i <= n; i ++) {
			r = 1;
			while ( r <= m && b[i][r] == 1)  r++;
			while ( r <= m) b[i][r] = 0, r ++;
		}
		for (j = 1; j <= m; j ++) {
			r = 1;
			while ( r <= n && b[r][j] == 1) r ++;
			while ( r <= n) b[r][j] = 0, r ++;
		}
		can = 1;
		for (i = 1; i <= n; i ++) {
			for (j = 1; j <= m; j ++) {
				if ( b[i][j] == 1) {
					if ( abs(mx - a[i][j]) > mid)  {
						can = 0;
					}
				}
				else {
					if ( abs(mn - a[i][j]) > mid) {
						can = 0;
					}
				}
			}
		}
		if ( can == 0) lo = mid + 1;
		else hi = mid;
	}
	ans = min(ans, lo);
	lo = 0;
	hi = ans;
	//deed heseg n baga
	while ( lo < hi) {
		mid = (lo + hi)/2;
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= m; j ++) {
				if ( mx  - a[i][j] <= mid) b[i][j] = 1;
				else b[i][j] = 0;
			}
		}
		for (i = 1; i <= n; i ++) {
			r = m;
			while ( r >= 1 && b[i][r] == 1)  r--;
			while ( r >= 1) b[i][r] = 0, r --;
		}
		for (j = 1; j <= m; j ++) {
			r = 1;
			while ( r <= n && b[r][j] == 1) r ++;
			while ( r <= n) b[r][j] = 0, r ++;
		}
		can = 1;
		for (i = 1; i <= n; i ++) {
			for (j = 1; j <= m; j ++) {
				if ( b[i][j] == 1) {
					if ( abs(mx - a[i][j]) > mid)  {
						can = 0;
					}
				}
				else {
					if ( abs(mn - a[i][j]) > mid) {
						can = 0;
					}
				}
			}
		}
		if ( can == 0) lo = mid + 1;
		else hi = mid;
	}
	ans = min(ans, lo);
		lo = 0;
	hi = ans;
	//deed heseg n baga
	while ( lo < hi) {
		mid = (lo + hi)/2;
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= m; j ++) {
				if ( a[i][j] - mn <= mid) b[i][j] = 1;
				else b[i][j] = 0;
			}
		}
		for (i = 1; i <= n; i ++) {
			r = m;
			while ( r >= 1 && b[i][r] == 1)  r--;
			while ( r >= 1) b[i][r] = 0, r --;
		}
		for (j = 1; j <= m; j ++) {
			r = 1;
			while ( r <= n && b[r][j] == 1) r ++;
			while ( r <= n) b[r][j] = 0, r ++;
		}
		can = 1;
		for (i = 1; i <= n; i ++) {
			for (j = 1; j <= m; j ++) {
				if ( b[i][j] == 0) {
					if ( abs(mx - a[i][j]) > mid)  can  = 0;
				}
				else {
					if ( abs(mn - a[i][j]) > mid) can = 0;
				}
			}
		}
		if ( can == 0) lo = mid + 1;
		else hi = mid;
	}
	ans = min(ans, lo);
	cout << ans << endl;
	
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |