Submission #944884

#TimeUsernameProblemLanguageResultExecution timeMemory
944884gelastropodTriple Jump (JOI19_jumps)C++14
19 / 100
1325 ms524288 KiB
#include <bits/stdc++.h> using namespace std; struct node { int s, e, m, v; node *l, *r; node(int _s, int _e) : s(_s), e(_e), m((_s + _e) / 2), v(-1) { if (s != e) l = new node(s, m), r = new node(m + 1, e); } void upd(int n, int x) { if (s == e) { v = x; return; } if (n <= m) l->upd(n, x); else r->upd(n, x); v = max(l->v, r->v); } int qry(int a, int b) { if (b < s || a > e) return -1; if (a <= s && b >= e) return v; return max(l->qry(a, b), r->qry(a, b)); } } *root; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, x, Q, l, r; cin >> N; vector<int> stiff(N + 5, -1); root = new node(0, N + 5); for (int i = 0; i < N; i++) { cin >> x; root->upd(i, x); stiff[i] = x; } vector<vector<int>> precomp(N + 5, vector<int>(N + 5, -1)), prefix(N + 5, vector<int>(N + 5, -1)), ans(N, vector<int>(N + 5, -1)); for (int i = 0; i < N; i++) { for (int j = i + 2; j < N; j++) { precomp[i][j] = stiff[i] + stiff[j] + root->qry(i + 1, (i + j) / 2); } } for (int i = N - 1; i >= 0; i--) { for (int j = i + 2; j < N; j++) { prefix[i][j] = max(prefix[i + 1][j], precomp[i][j]); } } for (int i = 0; i < N; i++) { for (int j = i + 2; j < N; j++) { ans[i][j] = max(ans[i][j - 1], prefix[i][j]); } } cin >> Q; for (int i = 0; i < Q; i++) { cin >> l >> r; l--, r--; cout << ans[l][r] << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...