Submission #197085

#TimeUsernameProblemLanguageResultExecution timeMemory
197085PankinMaxcomp (info1cup18_maxcomp)C++14
60 / 100
154 ms8316 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("Ofast") //#pragma GCC optimize("-O3") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define mp make_pair #define ll long long #define ld long double #define pb push_back #define fast_io ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define fs first #define sc second #define getfiles ifstream cin("input.txt"); ofstream cout("output.txt"); #define endl '\n' #define pii pair<ll, ll> const ll INF = 2000000005; const ll BIG_INF = 2000000000000000005; const ll mod = 1000000007; const ll P = 31; const ld PI = 3.141592653589793238462643; const double eps = 1e-9; using namespace std; using namespace __gnu_pbds; bool valid(ll x, ll y, ll n, ll m) { return x >= 0 && y >= 0 && x < n && y < m; } mt19937 rng(1999999973); typedef tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; const ll N = 1005; ll a[N][N], n, m, curVal[N], suf[N], pref[N], ans = 0; inline void update(ll x) { for (ll i = 0; i < m; i++) { curVal[i] = min(curVal[i], a[x][i] - x); } ll curMin = INF + INF; for (ll i = 0; i < m; i++) { curMin = min(curMin, curVal[i] - i); pref[i] = curMin; } curMin = INF + INF; for (ll i = m - 1; i >= 0; i--) { curMin = min(curMin, curVal[i] + i); suf[i] = curMin; } } inline void repeat() { for (ll i = 0; i < N; i++) { curVal[i] = INF + INF; } for (ll x = 0; x < n; x++) { update(x); for (ll y = 0; y < m; y++) { if (y != 0) { ans = max(ans, a[x][y] - pref[y - 1] - y - x); } if (y + 1 < n) { ans = max(ans, a[x][y] - suf[y + 1] + y - x); } } } } signed main() { fast_io; //getfiles; cin >> n >> m; for (ll i = 0; i < n; i++) { for (ll j = 0; j < m; j++) { cin >> a[i][j]; } } repeat(); for (ll i = 0; i < n; i++) { reverse(a[i], a[i] + m); } for (ll i = 0; i < n - 1 - i; i++) { for (ll j = 0; j < m; j++) { swap(a[i][j], a[n - 1 - i][j]); } } repeat(); cout << ans - 1; 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...