#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)
{
    if (desno<l || r<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()),ns);
            odg = max(odg,ans);
            if (v[s.top()] <= v[i]) s.pop();
            else break;
        }
        s.push(i);
    }
    cout<<odg<<endl;
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |