Submission #950399

#TimeUsernameProblemLanguageResultExecution timeMemory
950399vjudge1Triple Jump (JOI19_jumps)C++17
19 / 100
4030 ms154964 KiB
#include<bits/stdc++.h> using namespace std; const int N = (int)5e5+7; const int M = (int)2e5+7; const int inf = (int)1e9+7; int n, q, a[N]; int dp[5003][5003], mx[5003][5003]; pair<int, int> suf[N]; int l[N], r[N]; void solve3() { cin >> q >> q >> q; for(int i = n; i >= 1; --i) { suf[i] = max(suf[i+1], {a[i], i}); } stack<int> st; for(int i = 1; i <= n; ++i) { l[i] = i; while(!st.empty() && a[st.top()]<a[i]) { l[i]=l[st.top()]; st.pop(); } st.push(i); } while(!st.empty()) { continue; } for(int i = n; i >= 1; --i) { r[i] = i; while(!st.empty() && a[st.top()]<a[i]) { r[i] = r[st.top()]; st.pop(); } } int ans = 0; for(int j = 2; j < n; ++j) { for(int i = 1; i < l[j]; ++i) { int o = (j-i); if(r[i]<j && j+o <= n) { ans = max(ans, a[i]+a[j]+suf[j+o].first); } } } cout << ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; for(int i = 1; i <= n; ++i) { cin >> a[i]; } if(n>5000) { solve3(); return 0; } for(int i = 1; i <= n; ++i) { for(int j = i; j <= n; ++j) { mx[i][j] = max(mx[i][j-1], a[j]); } } for(int len = 3; len <= n; ++len) { for(int i = 1; i <= n-len+1; ++i) { int j = i+len-1; dp[i][j]=max(dp[i+1][j], dp[i][j-1]); int cur = a[i]+a[j]; int m = (i+j)/2; cur += mx[i+1][m]; dp[i][j] = max(dp[i][j], cur); } } cin >> q; while(q--) { int l, r; cin >> l >> r; cout << dp[l][r] << "\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...