Submission #478131

#TimeUsernameProblemLanguageResultExecution timeMemory
478131nicolaalexandraTriple Jump (JOI19_jumps)C++14
27 / 100
236 ms7012 KiB
#include <bits/stdc++.h>
#define DIM 500010
using namespace std;

pair <int,int> aint[DIM*4];
int v[DIM];
int n,i,maxi,poz,maxi2,poz2,q,x,y;

void build (int nod, int st, int dr){
    if (st == dr){
        aint[nod] = make_pair(v[st],st);
        return;
    }
    int mid = (st+dr)>>1;
    build (nod<<1,st,mid);
    build ((nod<<1)|1,mid+1,dr);

    if (aint[nod<<1].first >= aint[(nod<<1)|1].first)
        aint[nod] = aint[nod<<1];
    else aint[nod] = aint[(nod<<1)|1];

}

void query (int nod, int st, int dr, int x, int y, int &maxi, int &poz){
    if (x <= st && dr <= y){
        if (aint[nod].first > maxi){
            maxi = aint[nod].first;
            poz = aint[nod].second;
        }
        return;
    }

    int mid = (st+dr)>>1;
    if (x <= mid)
        query (nod<<1,st,mid,x,y,maxi,poz);
    if (y > mid)
        query ((nod<<1)|1,mid+1,dr,x,y,maxi,poz);
}

int main (){

    //ifstream cin ("date.in");
    //ofstream cout ("date.out");

    cin>>n;
    for (i=1;i<=n;i++)
        cin>>v[i];

    cin>>q;
    for (;q--;){
        cin>>x>>y;
    }

    build (1,1,n);

    int sol = 0;
    for (i=1;i<=n-2;i++){

        int poz_max_b = (n + i) / 2;

        /// caz 1

        maxi = 0, poz = 0;
        query (1,1,n,i+1,poz_max_b,maxi,poz);

        int sum = v[i] + maxi;

        maxi2 = 0, poz2 = 0;
        query (1,1,n,2*poz-i,n,maxi2,poz2);

        sum += maxi2;

        sol = max (sol,sum);

        /// caz 2

        maxi = 0, poz = 0;
        query (1,1,n,i+2,n,maxi,poz);


        sum = v[i] + maxi;

        maxi2 = 0, poz2 = 0;
        query (1,1,n,i+1,(i+poz)/2,maxi2,poz2);

        sum += maxi2;

        sol = max (sol,sum);
    }

    cout<<sol;


    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...