Submission #245916

#TimeUsernameProblemLanguageResultExecution timeMemory
245916RealSuperman1Maxcomp (info1cup18_maxcomp)C++17
100 / 100
223 ms20988 KiB
// #pragma comment(linker, "\stack:200000000") // #pragma GCC optimize("Ofast") // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcount,abm,mmx,avx,avx2,tune=native") //#pragma GCC target("avx,avx2") // #pragma GCC target("avx,avx2,fma") // #pragma GCC optimization("O3") // #pragma GCC optimization("unroll-loops") #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <bits/stdc++.h> #define ll long long #define ld long double #define pb push_back #define fi first #define se second #define pii pair<int, int> #define pll pair<ll, ll> using namespace std; using namespace __gnu_pbds; typedef tree< ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; const int N = 1e3 + 10; const int mod = 1e9 + 7; const ll INF = 1e16; const int lim = 450; int n, m, a[N][N], more1[N][N], less1[N][N]; int main() { // ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL); // freopen("input.txt", "r", stdin); // freopen("input.in", "r", stdin); // freopen("input.out", "w", stdout); scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) scanf("%d", &a[i][j]); int ans = -1; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { more1[i][j] = a[i][j] + i + j; if (i != 1) more1[i][j] = max(more1[i][j], more1[i - 1][j]); if (j != 1) more1[i][j] = max(more1[i][j], more1[i][j - 1]); less1[i][j] = -a[i][j] + i + j; if (i != 1) less1[i][j] = max(less1[i][j], less1[i - 1][j]); if (j != 1) less1[i][j] = max(less1[i][j], less1[i][j - 1]); ans = max(ans, a[i][j] + less1[i][j] - i - j - 1); // cout << i << " " << j << " " << ans << endl; ans = max(ans, -a[i][j] + more1[i][j] - i - j - 1); // cout << i << " " << j << " " << ans << endl; } for (int i = 1; i <= n; i++) for (int j = 1; j <= m / 2; j++) swap(a[i][j], a[i][m - j + 1]); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { more1[i][j] = a[i][j] + i + j; if (i != 1) more1[i][j] = max(more1[i][j], more1[i - 1][j]); if (j != 1) more1[i][j] = max(more1[i][j], more1[i][j - 1]); less1[i][j] = -a[i][j] + i + j; if (i != 1) less1[i][j] = max(less1[i][j], less1[i - 1][j]); if (j != 1) less1[i][j] = max(less1[i][j], less1[i][j - 1]); ans = max(ans, a[i][j] + less1[i][j] - i - j - 1); // cout << i << " " << j << " " << ans << endl; ans = max(ans, -a[i][j] + more1[i][j] - i - j - 1); // cout << i << " " << j << " " << ans << endl; } printf("%d", ans); }

Compilation message (stderr)

maxcomp.cpp: In function 'int main()':
maxcomp.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &n, &m);
     ~~~~~^~~~~~~~~~~~~~~~~
maxcomp.cpp:51:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &a[i][j]);
             ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...