제출 #242285

#제출 시각아이디문제언어결과실행 시간메모리
242285lyc3단 점프 (JOI19_jumps)C++14
5 / 100
4093 ms640 KiB
#include <bits/stdc++.h>
using namespace std;

#define TRACE(x) cerr << #x << " :: " << x << endl
#define _ << " " <<
#define SZ(x) (int)(x).size()
#define ALL(x) (x).begin(),(x).end()
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define RFOR(i,a,b) for (int i=(a);i>=(b);--i)

const int mxN = 5005;
const int lgN = 14;
const int mxQ = 105;

int N, Q, A[mxN];

struct SparseTable {
    int T[mxN][lgN];
    void build() {
        FOR(i,1,N) T[i][0] = i;
        FOR(k,1,lgN-1){
            FOR(i,1,N-(1<<k)+1){
                int p = T[i][k-1], q = T[i+(1<<(k-1))][k-1];
                T[i][k] = (A[p] > A[q] ? p : q);
            }
        }
    }
    int query(int L, int R) {
        if (L > R) return -1e9;
        int k = floor(log2(R-L+1));
        int p = T[L][k], q = T[R-(1<<k)+1][k];
        return max(A[p],A[q]);
    }
} st;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> N;
    FOR(i,1,N){
        cin >> A[i];
    }
    st.build();
    cin >> Q;
    FOR(i,1,Q){
        int L, R; cin >> L >> R;
        int ans = 0;
        FOR(x,L,R){
            FOR(y,x+1,R){
                ans = max(ans,A[x]+A[y]+st.query(max(L,x-(y-x)),x-1));
            }
        }
        cout << ans << '\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...