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