Submission #142878

#TimeUsernameProblemLanguageResultExecution timeMemory
142878Sarah_MokhtarTriple Jump (JOI19_jumps)C++14
5 / 100
4018 ms5368 KiB
#include<bits/stdc++.h>
using namespace std;
#define f first
#define s second
typedef long long ll;
const int N=2e5+10,M=(N<<2),OO=0x3f3f3f;
ll tree[N],A[N],n,q,l,r;
void build(int node,int l,int r){
    if(l==r) tree[node]=A[l];
    else{
        int med=(l+r)/2;
        build(2*node,l,med);
        build(2*node+1,med+1,r);
        tree[node]=max(tree[2*node],tree[2*node+1]);
    }
}
int query(int node,int s,int e,int l,int r){
    if(s>e||s>r||e<l) return 0;
    if(s>=l&&e<=r) return tree[node];
    int med=(s+e)/2;
    int q1=query(2*node,s,med,l,r);
    int q2=query(2*node+1,med+1,e,l,r);
    return max(q1,q2);
}
int main(){
    cin>>n;
    for(int i=0;i<n;++i) cin>>A[i];
    build(1,0,n-1);
    cin>>q;
    //cout<<query(1,0,n-1,1,2)<<"\n";
    while(q--){
        cin>>l>>r;
        --l,--r;
        ll mx=0;
        for(int i=l;i<=r;++i){
            ll sum=0;
            for(int j=i+1;j<=r;++j){
                sum=A[i]+A[j];
                int dis=abs(j-i);
                int int1=j+dis,int2=r;
                if(int1<l||int1>r) continue;
                ll ans=query(1,0,n-1,int1,int2);
                //cout<<ans<<"\n";
                sum+=ans;
                mx=max(mx,sum);
            }
        }
        cout<<mx<<"\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...