Submission #687564

#TimeUsernameProblemLanguageResultExecution timeMemory
687564NK_The Kingdom of JOIOI (JOI17_joioi)C++17
60 / 100
4051 ms131264 KiB
// Success consists of going from failure to failure without loss of enthusiasm
#include <bits/stdc++.h>

using namespace std;

#define nl '\n'

int main() {
	cin.tie(0)->sync_with_stdio(0);
	
	int N, M; cin >> N >> M;
	vector<vector<int>> A(N, vector<int>(M)); for(auto& v : A) for(auto& x : v) cin >> x;

	auto range = [&](const set<int>& S) {
		return *rbegin(S) - *begin(S);
	};	

	auto solve = [&]() {
		vector<vector<int>> P = A;
		vector<array<int, 3>> I;
		set<int> JOI, IOI;
		for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) {
			JOI.insert(A[i][j]);
			I.push_back({A[i][j], i, j});
			if (i != 0) P[i][j] = min(P[i][j], P[i-1][j]);
			if (j != 0) P[i][j] = min(P[i][j], P[i][j-1]);
		}

		int ans = int(1e9);
		sort(rbegin(I), rend(I));
		for(int i = 0; i < int(size(I)); i++) {
			int j = i;
			while(j < int(size(I)) && I[i][0] == I[j][0]) {
				int r = I[j][1], c = I[j][2];
				IOI.insert(P[r][c]);
				j++;
			}
			IOI.insert(I[i][0]);
			JOI.erase(I[i][0]);

			if (size(JOI) == 0) break;

			// cout << I[i][0] << endl;

			// for(auto x : JOI) cout << x << " ";
			// cout << endl;

			// for(auto x : IOI) cout << x << " ";
			// cout << endl;

			int res = max(range(JOI), range(IOI));
			// cout << range(JOI) << " " << range(IOI) << endl;
			ans = min(ans, res);
			i = j-1;
		}

		return ans;
	};

	int ans = int(1e9);
	for(int f1 = 0; f1 < 2; f1++) {
		for(int f2 = 0; f2 < 2; f2++) {
			// cout << 2 * f1 + f2 << nl;
			ans = min(ans, solve());

			for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) {
				int o = M - 1 - j;
				if (j <= o) swap(A[i][j], A[i][o]);
			}
		}

		for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) {
			int o = N - 1 - i;
			if (i <= o) swap(A[i][j], A[o][j]);
		}
	}

	cout << ans << nl;



    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...