#include <algorithm>
#include <iostream>
using namespace std;
const int N = 2000;
const int M = 2000;
const int INF = 0x3f3f3f3f;
int aa[N][M];
int main() {
ios_base::sync_with_stdio(false), cin.tie(NULL);
int n, m; cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> aa[i][j];
int ans = INF;
for (int h = 0; h < 2; h++) {
for (int g = 0; g < 2; g++) {
int lower = -1, upper = INF;
while (upper - lower > 1) {
int d = lower + upper >> 1;
int al = INF;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
al = min(al, aa[i][j]);
int ar = al + d, bl = INF, br = 0;
for (int j_ = m, i = n - 1; i >= 0; i--) {
int j = 0;
while (j < j_ && aa[i][j] <= ar)
j++;
for (j_ = j; j < m; j++) {
bl = min(bl, aa[i][j]);
br = max(br, aa[i][j]);
}
}
if (br - bl <= d)
upper = d;
else
lower = d;
}
ans = min(ans, upper);
for (int i = 0; i < n; i++)
for (int j = 0; j < i; j++)
swap(aa[i][j], aa[j][i]);
}
for (int i = 0; i < n; i++)
reverse(aa[i], aa[i] + m);
}
cout << ans << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |