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...