Submission #1168915

#TimeUsernameProblemLanguageResultExecution timeMemory
1168915mousebeaverTriple Jump (JOI19_jumps)C++20
19 / 100
2153 ms589824 KiB
#define ll long long #include <bits/stdc++.h> using namespace std; ll left(ll i) {return 2*i;} ll right(ll i) {return 2*i+1;} ll query(vector<ll>& s, ll i, ll a, ll b, ll l, ll r) { if(l <= a && b <= r) return s[i]; if(r < a || b < l) return 0; ll mid = (a+b)/2; return max(query(s, left(i), a, mid, l, r), query(s, right(i), mid+1, b, l, r)); } int main() { ios::sync_with_stdio(false); cin.tie(0); ll n; cin>>n; vector<ll> a(n); for(ll& i : a) cin>>i; ll segnodes = 1; while(2*n > segnodes) segnodes *= 2; vector<ll> s(segnodes, 0); for(ll i = 0; i < n; i++) s[segnodes/2 + i] = a[i]; for(ll i = segnodes/2 - 1; i > 0; i--) s[i] = max(s[left(i)], s[right(i)]); vector<vector<ll>> dp(n, vector<ll> (n, 0)); for(ll i = 0; i+2 < n; i++) dp[i][i+2] = a[i]+a[i+1]+a[i+2]; for(ll k = 3; k < n; k++) { for(ll i = 0; i+k < n; i++) { ll j = i+k; dp[i][j] = max(dp[i][j-1], dp[i+1][j]); dp[i][j] = max(dp[i][j], (a[i]+a[j]+query(s, 1, 1, segnodes/2, 1+i+1, 1+i+((ll) k/2)))); } } ll q; cin>>q; while(q--) { ll l, r; cin>>l>>r; l--; r--; cout<<dp[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...