제출 #1228717

#제출 시각아이디문제언어결과실행 시간메모리
1228717Jovica3단 점프 (JOI19_jumps)C++20
27 / 100
86 ms6216 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

ll drvo[1000001];

ll najdi(int l,int r,int poz,int const levo,const int desno)
{
    //cout<<"ulava levo = "<<levo<<" desno = "<<desno<<endl;
    if (desno<l || r<levo || desno<levo) return 0;
    if (levo<=l && r<=desno) return drvo[poz];

    int mid = (l+r)/2;
    return max(najdi(l,mid,poz*2,levo,desno),najdi(mid+1,r,poz*2+1,levo,desno));
}

int main()
{
    int n,ns=1;
    cin>>n;///staj ll
    vector<ll> v(n);
    while (ns<n) ns*=2;
    for (int i=0;i<n;i++) {
        cin>>v[i];
        drvo[ns+i] = v[i];
    }
    for (int i=ns-1;i>0;i--) drvo[i] = max(drvo[i*2],drvo[i*2+1]);

    int q,levo,desno;cin>>q>>levo>>desno;

    stack<int> s;
    ll odg= 0;
    for (int i=0;i<n;i++)
    {
        while (s.size())
        {
            ll ans = v[s.top()] + v[i] + najdi(1,ns,1,i+(i-s.top())+1,ns);
            //cout<<v[s.top()]<<" + "<<v[i]<<" + nekoe "<<ans-v[i]-v[s.top()]<<" = "<<ans<<endl;
            odg = max(odg,ans);

            if (v[s.top()] <= v[i]) s.pop();
            else break;
        }
        s.push(i);
    }

    cout<<odg<<endl;
    return 0;
}
/*
8
1 2 3 4 5 6 7 8
1
1 8

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...