Submission #1145633

#TimeUsernameProblemLanguageResultExecution timeMemory
1145633keisuke6Triple Jump (JOI19_jumps)C++20
0 / 100
1093 ms9836 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
    srand((unsigned)time(NULL));
    ios::sync_with_stdio(false);
    std::cin.tie(0);
    int N;
    cin>>N;
    vector<int> A(N);
    vector<pair<int,int>> S(N);
    for(int i=0;i<N;i++){
        cin>>A[i];
        S[i] = {A[i],i};
    }
    sort(S.rbegin(),S.rend());
    int ans = 0;
    for(auto [a,t]:S){
        if(clock() > CLOCKS_PER_SEC) break;
        {
            multiset<int> s;
            int ma = 0;
            for(int i=t+2;i<N;i++){
                if((i-t)%2 == 0) ma = max(ma,A[(i+t)/2]);
                ans = max(ans,a+ma+A[i]);
            }
            ma = 0;
            if(t) s.insert(A[t-1]);
            for(int i=t-2;i>=0;i--){
                ans = max(ans,a+ma+*s.rbegin());
                s.insert(A[i]);
                if((t-i)%2 == 0) s.erase(s.find(A[i]));
            }
        }
        {
            int ind = N-1, ma = -1e18;
            for(int i=0;i<t;i++){
                while(t-i <= ind-t){
                    ma = max(ma,A[ind]);
                    ind--;
                }
                ans = max(ans,A[i]+A[t]+ma);
            }
        }
    }
    for(int l=0;l<N-2;l++){
        int ma = 0;
        for(int r=l+2;r<=min(N-1,l+300);r++){
            if((r-l)^1) ma = max(ma,A[(l+r)/2]);
            ans = max(ans,ma+A[l]+A[r]);
        }
    }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...