Submission #1161538

#TimeUsernameProblemLanguageResultExecution timeMemory
1161538yonatanlMaxcomp (info1cup18_maxcomp)C++20
100 / 100
74 ms23892 KiB
#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) {
	ll ans = -1;
	vvll min_ele(n, vll(m, 1e18)), max_ele(n, vll(m, -2));
	for (ll i = 0; i < n; i++) {
		for (ll j = 0; j < m; j++) {
			if (i > 0) {
				min_ele[i][j] = min_ele[i - 1][j];
				max_ele[i][j] = max_ele[i - 1][j];
			}
			if (j > 0) {
				min_ele[i][j] = min(min_ele[i][j], min_ele[i][j - 1]);
				max_ele[i][j] = max(max_ele[i][j], max_ele[i][j - 1]);
			}
			min_ele[i][j] = min(min_ele[i][j], arr[i][j] - i - j);
			max_ele[i][j] = max(max_ele[i][j], arr[i][j] + i + j);
			ans = max(ans, (arr[i][j] - i - j) - min_ele[i][j] - 1);
			ans = max(ans, max_ele[i][j] - (arr[i][j] + i + j) - 1);
		}
	}
	return ans;
}

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 << endl;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...