Submission #110875

#TimeUsernameProblemLanguageResultExecution timeMemory
110875WLZThe Kingdom of JOIOI (JOI17_joioi)C++17
100 / 100
826 ms55168 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; int n, m, mx = 0, mn = INF; vector< vector<int> > a; void flip_h() { for (int j = 1; j <= m; j++) { for (int i = 1; i <= n / 2; i++) { swap(a[n - i + 1][j], a[i][j]); } } } void flip_v() { for (int i = 1; i <= n; i++) { for (int j = 1; j <= m / 2; j++) { swap(a[i][m - j + 1], a[i][j]); } } } int check(int k) { int t = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] < mx - k) { t = max(t, j + 1); } } for (int j = 1; j < t; j++) { if (a[i][j] > mn + k) { return 0; } } } return 1; } int solve() { int lo = 0, hi = mx - mn; while (lo < hi) { int mid = (lo + hi) / 2; if (check(mid)) { hi = mid; } else { lo = mid + 1; } } return lo; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; a.assign(n + 1, vector<int>(m + 2, 0)); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> a[i][j]; mx = max(mx, a[i][j]); mn = min(mn, a[i][j]); } } int ans = solve(); flip_h(); ans = min(ans, solve()); flip_v(); ans = min(ans, solve()); flip_h(); 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...