Submission #671102

#TimeUsernameProblemLanguageResultExecution timeMemory
671102GrandTiger1729The Kingdom of JOIOI (JOI17_joioi)C++17
100 / 100
2143 ms46576 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int INF = 1e9 + 9; int main(){ cin.tie(0)->sync_with_stdio(0); int n, m; cin >> n >> m; vector<vector<int>> a(n, vector<int>(m)); int minn = INF, px = 0, py = 0; for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ cin >> a[i][j]; if (a[i][j] < minn){ minn = a[i][j]; px = i, py = j; } } } auto check = [&](int x) -> bool { auto _check = [&]() -> bool { vector<vector<bool>> tag(n, vector<bool>(m)); for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ if (a[i][j] > minn + x){ tag[i][j] = 1; } } } vector<vector<bool>> vis(n, vector<bool>(m)); int maxn = m; for (int i = 0; i < n; i++){ for (int j = 0; j < maxn; j++){ if (tag[i][j]){ maxn = j; break; } vis[i][j] = 1; } } if (!vis[px][py]) return false; int mn = INF, mx = -INF; for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ if (!vis[i][j]){ mn = min(mn, a[i][j]); mx = max(mx, a[i][j]); } } } return mx - mn <= x; }; bool ret = 0; for (int t = 0; t < 2; t++){ ret |= _check(); reverse(a.begin(), a.end()); px = n - 1 - px; ret |= _check(); for (int i = 0; i < n; i++){ reverse(a[i].begin(), a[i].end()); } py = m - 1 - py; } return ret; }; int l = -1, r = INF; while (l < r - 1){ int mid = (l + r) / 2; 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...