제출 #502745

#제출 시각아이디문제언어결과실행 시간메모리
502745amunduzbaev3단 점프 (JOI19_jumps)C++14
0 / 100
92 ms27072 KiB
#include "bits/stdc++.h" using namespace std; #define ar array signed main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin>>n; vector<int> a(n + 1); for(int i=1;i<=n;i++) cin>>a[i]; vector<int> p(n); for(int i=0;i<n;i++) p[i] = i + 1; sort(p.begin(), p.end(), [&](int i, int j){ return (a[i] > a[j]); }); vector<vector<int>> mx(n + 1, vector<int>(20)); for(int i=1;i<=n;i++) mx[i][0] = a[i]; for(int j=1;j<20;j++){ for(int i=1;i + (1 << (j - 1))<=n;i++){ mx[i][j] = max(mx[i][j-1], mx[i + (1 << (j - 1))][j-1]); } } auto get = [&](int l, int r){ if(l > r) return 0; int lg = __lg(r - l + 1); return max(mx[l][lg], mx[r - (1 << lg) + 1][lg]); }; auto check = [&](int l, int r){ int res = a[l] + a[r]; res += max({get(l + 1, (r - l) / 2), get(max(1, l - (r - l)), l - 1), get(r + 1, min(n, r + (r - l)))}); return res; }; int B = min(n, 400); int res = 0; for(int i=0;i<B;i++){ for(int j=i+1;j<B;j++){ res = max(res, check(p[i], p[j])); } } cout<<res<<"\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...