Submission #768836

#TimeUsernameProblemLanguageResultExecution timeMemory
768836raysh07Maxcomp (info1cup18_maxcomp)C++17
60 / 100
535 ms17348 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define INF (int)1e18 #define f first #define s second mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count()); const int N = 1e3 + 69; int seg[4 * N][4]; int a[N][N]; void update(int l, int r, int pos, int qp, int v, int i){ seg[pos][i] = max(seg[pos][i], v); if (l == r) return; int mid = (l + r)/2; if (qp <= mid) update(l, mid, pos*2, qp, v, i); else update(mid + 1, r, pos*2 + 1, qp, v, i); } int query(int l, int r, int pos, int ql, int qr, int i){ if (l >= ql && r <= qr) return seg[pos][i]; else if (l > qr || r < ql) return -INF; int mid = (l + r)/2; return max(query(l, mid, pos*2, ql, qr, i), query(mid + 1, r, pos*2 + 1, ql, qr, i)); } void Solve() { int n, m; cin >> n >> m; for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ cin >> a[i][j]; } } for (int i = 0; i < 4 * N; i++){ for (int j = 0; j < 4; j++) { seg[i][j] = -INF; } } int ans = -1; for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ // 0 --> a, y -, - // 1 --> a, y +, - // 2 --> a, y -, + // 3 --> a, y +, + ans = max(ans, query(1, m, 1, j, m, 0) + a[i][j] + j - i - 1); ans = max(ans, query(1, m, 1, j, m, 1) - a[i][j] + j - i - 1); ans = max(ans, query(1, m, 1, 1, j, 2) + a[i][j] - j - i - 1); ans = max(ans, query(1, m, 1, 1, j, 3) - a[i][j] - j - i - 1); update(1, m, 1, j, -a[i][j] - j + i, 0); update(1, m, 1, j, a[i][j] - j + i, 1); update(1, m, 1, j, -a[i][j] + j + i, 2); update(1, m, 1, j, a[i][j] + j + i, 3); } } cout << ans << "\n"; } int32_t main() { auto begin = std::chrono::high_resolution_clock::now(); ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; // cin >> t; for(int i = 1; i <= t; i++) { //cout << "Case #" << i << ": "; Solve(); } auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; 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...