Submission #595059

#TimeUsernameProblemLanguageResultExecution timeMemory
595059piOOEThe Kingdom of JOIOI (JOI17_joioi)C++17
100 / 100
3366 ms58712 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 2001; int a[N][N], n, m, mx, px, py; bool t[N][N]; void upd() { mx = -1; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (mx < a[i][j]) { mx = a[i][j]; px = i, py = j; } } } } void mirror() { for (int i = 0; i < n; ++i) { reverse(a[i], a[i] + m); } upd(); } void rotate180() { for (int j = 0; j < m; ++j) { for (int i = 0; i < n / 2; ++i) { swap(a[i][j], a[n - i - 1][j]); } } upd(); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> a[i][j]; } } upd(); auto check = [&](int mid) -> bool { for (int _ = 0; _ < 2; ++_) { for (int iter = 0; iter < 2; ++iter) { memset(t, 0, sizeof(t)); int pos = m; for (int i = 0; i < n; ++i) { for (int j = 0; j < pos; ++j) { if (mx - a[i][j] <= mid) { t[i][j] = true; } else { pos = j; break; } } } int Max = -1, Min = mx; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (!t[i][j]) { Max = max(a[i][j], Max); Min = min(a[i][j], Min); } } } if (Max == -1 || Max - Min <= mid) { return true; } rotate180(); } mirror(); } return false; }; int l = -1, r = mx; while (l + 1 < r) { int mid = (l + r) >> 1; if (check(mid)) { r = mid; } else { l = mid; } } cout << r; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...