제출 #1347634

#제출 시각아이디문제언어결과실행 시간메모리
1347634vladmart09The Kingdom of JOIOI (JOI17_joioi)C++20
60 / 100
4097 ms94408 KiB

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <random>
#include <queue>
#include <numeric>
#include <array>
#include <iomanip>
#include <stack>
#include <chrono>
#include <climits>

using namespace std;

using ll = int;
using ld = long double;
using vi = vector<ll>;
using vii = vector<vi>;
using viii = vector<vii>;
using pi = pair<ll, ll>;
using vpi = vector<pi>;
using vb = vector<bool>;
using vs = vector<string>;

#define vec vector
#define cmax(x, y) x = max({x, y})
#define cmin(x, y) x = min({x, y})
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()

const ll N = 1e3 + 5, MOD = 1e9 + 7, INF = (ll)1e18, K = 20;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

void rotate(vii& a) {
	ll n = a.size();
	ll m = a[0].size();

	vii b(m, vi(n));

	for (ll i = 0; i < n; i++) {
		for (ll j = 0; j < m; j++) {
			b[j][n - i - 1] = a[i][j];
		}
	}

	a = b;
}

ll check(vii& a) {
	ll n = a.size();
	ll m = a[0].size();

	map<ll, vpi> mp;

	for (ll i = 0; i < n; i++) {
		for (ll j = 0; j < m; j++) {
			mp[a[i][j]].push_back({i + 1, j + 1});
		}
	}

	vii pref(n + 1, vi(m + 1));

	for (ll i = 1; i <= n; i++) {
		for (ll j = 1; j <= m; j++) {
			pref[i][j] = max({a[i - 1][j - 1], pref[i - 1][j], pref[i][j - 1]});
		}
	}

	ll mx = (*mp.rbegin()).first;
	ll mn = (*mp.begin()).first;
	ll mx2 = (*mp.begin()).first;

	ll ans = INT_MAX;
	
	for (auto& [f, s] : mp) {
		cmin(ans, max(mx - f, mx2 - mn));

		for (auto& [x, y] : s) {
			cmax(mx2, pref[x][y]);
		}
	}

	return ans;
}

void solve() {
	ll n, m; cin >> n >> m;

	vii a(n, vi(m));
	for (auto& x : a) {
		for (auto& y : x) cin >> y;
	}

	ll ans = INT_MAX;
	cmin(ans, check(a));

	rotate(a);
	cmin(ans, check(a));

	rotate(a);
	cmin(ans, check(a));

	rotate(a);
	cmin(ans, check(a));

	cout << ans << '\n';
}

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

	long long tt = 1;
	//cin >> tt;

	while (tt--) {
		solve();
		cout << '\n';
	}

	return 0;
}

/*



































Какие темы повторить:
1) мст
2) 2сат
3) точки артикуляции
4) ксор базис
5) эйлеровый цикл, путь
6) кмп
7) конвекс хулл
8) вафельное дерево
9) суфиксный массив
10) суффиксный автомат
11) ним

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...