#include <iostream>
#include <vector>
#include <algorithm>
#define rep(i, s, e) for (ll i = s; i < e; i++)
#define upmax(a, b) a = max(a, b)
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
ll calc(vvll& arr, ll n, ll m) {
	vvll minV(n, vll(m)), maxV(n, vll(m));
	vvll ans(n, vll(m));
	maxV[0][0] = arr[0][0];
	minV[0][0] = arr[0][0];
	rep(i, 1, n) {
		minV[i][0] = min(minV[i - 1][0], arr[i][0] - i);
		maxV[i][0] = max(maxV[i - 1][0], arr[i][0] + i);
		ans[i][0] = max(arr[i][0] - i - minV[i][0], maxV[i][0] - arr[i][0] - i);
	}
	rep(j, 1, m) {
		minV[0][j] = min(minV[0][j - 1], arr[0][j] - j);
		maxV[0][j] = max(maxV[0][j - 1], arr[0][j] + j);
		ans[0][j] = max(arr[0][j] - j - minV[0][j], maxV[0][j] - arr[0][j] - j);
	}
	rep(i, 1, n) {
		rep(j, 1, m) {
			minV[i][j] = min(arr[i][j] - i - j, min(minV[i - 1][j], minV[i][j - 1]));
			maxV[i][j] = max(arr[i][j] + i + j, max(maxV[i - 1][j], maxV[i][j - 1]));
			ans[i][j] = max(arr[i][j] - i - j - minV[i][j], maxV[i][j] - arr[i][j] - i - j);
		}
	}
	ll res = -1;
	rep(i, 0, n) {
		rep(j, 0, m) {
			upmax(res, ans[i][j]);
		}
	}
	return res;
}
void solve() {
	ll n, m;
	cin >> n >> m;
	vvll arr(n, vll(m));
	rep(i, 0, n) {
		rep(j, 0, m) {
			cin >> arr[i][j];
		}
	}
	ll res = calc(arr, n, m);
	rep(i, 0, n) {
		reverse(arr[i].begin(), arr[i].end());
	}
	upmax(res, calc(arr, n, m));
	cout << res - 1 << endl;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	solve();
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |