Submission #922932

#TimeUsernameProblemLanguageResultExecution timeMemory
922932IanisMaxcomp (info1cup18_maxcomp)C++17
0 / 100
1 ms4444 KiB
#ifdef LOCAL #include <iostream> #include <fstream> #include <iomanip> #include <cassert> #include <random> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #else #pragma GCC optimize("Ofast,unroll-loops") #include <bits/stdc++.h> #define cerr if (false) cerr #define endl '\n' #endif #define fi first #define se second #define sz(a) ((int)(a).size()) #define all(a) (a).begin(), (a).end() #define lsb(x) (x & (-x)) #define bit(mask, i) (((mask) >> (i)) & 1) #define popcount(x) __builtin_popcount(x) #define YES cout << "YES" << endl #define NO cout << "NO" << endl using namespace std; template <typename T> bool ckmax(T &a, T b) { return a < b ? a = b, true : false; } template <typename T> bool ckmin(T &a, T b) { return a > b ? a = b, true : false; } using ll = long long; using pii = pair<int, int>; const int NMAX = 1e3+5; const int di[] = { 1, -1, 0, 0 }; const int dj[] = { 0, 0, 1, -1 }; struct Point { int val, i, j; }; struct State { int max, min, cnt; int weight() const { return max - min - cnt; } State add(int val) { State s = *this; ckmax(s.max, val); ckmin(s.min, val); s.cnt++; return s; } }; bool operator<(const State &s1, const State &s2) { return s1.weight() < s2.weight(); } int n, m; int a[NMAX][NMAX]; State dp[NMAX][NMAX]; bool vis[NMAX][NMAX]; void read() { cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) cin >> a[i][j]; } } int solve() { vector<Point> v; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { dp[i][j] = { 0, 0, 1 }; v.push_back({ a[i][j], i, j }); } } sort(all(v), [&](const Point &a, const Point &b) { return a.val < b.val; }); for (auto [ val, i0, j0 ] : v) { vis[i0][j0] = true; for (int k = 0; k < 4; k++) { int i = i0 + di[k], j = j0 + dj[k]; if (!vis[i][j]) ckmax(dp[i][j], dp[i0][j0].add(val)); } } int ans = -1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) ckmax(ans, dp[i][j].weight()); } return ans; } signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); #endif ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); read(); cout << solve() << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...