Submission #129364

#TimeUsernameProblemLanguageResultExecution timeMemory
129364LatinaThe Kingdom of JOIOI (JOI17_joioi)C++14
100 / 100
1188 ms54976 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 2019;

int H, W;
int A[N][N];
int gmax, gmin;

void flipRow() { for (int i = 0; i < H/2; i++) for (int j = 0; j < W; j++) swap(A[i][j], A[H-i-1][j]); }

void flipCol() { for (int i = 0; i < H; i++) for (int j = 0; j < W/2; j++) swap(A[i][j], A[i][W-j-1]); }

bool check(int t) {
	int sp = 0;
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) if (A[i][j] < gmax-t) sp = max(sp,j+1); 
		for (int j = 0; j < W; j++) if (gmin+t < A[i][j]) if (j < sp) return false;
	}
	return true;
}

int solve() {
	int l = 0, r = gmax-gmin;
	while (l < r) {
		int mid = (l+r)/2;
		if (check(mid)) r = mid;
		else l = mid+1;
	}
	return l;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> H >> W;
	for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) cin >> A[i][j];
	gmin = gmax = A[0][0];
	for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) {
		gmin = min(gmin,A[i][j]);
		gmax = max(gmax,A[i][j]);
	}
	int ans = solve();
	flipRow();
	ans = min(ans,solve());
	flipCol();
	ans = min(ans,solve());
	flipRow();
	ans = min(ans,solve());
	cout << ans << '\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...