#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=5e5+29;
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll n,q,w[N],st[N][20],lg[N],l[N],r[N];
void build(){
lg[1]=0;
for(ll i=2;i<=n;i++)lg[i]=lg[i/2]+1;
for(ll j=1;j<20;j++){
ll k=(1ll<<j);
for(ll i=k-1;i<=n;i++){
st[i][j]=max(st[i][j-1],st[i-k/2][j-1]);
}
}
}
ll get(ll l,ll r){
if(l>r)return -1e18;
ll k=lg[r-l+1];
return max(st[r][k],st[l+(1ll<<k)-1][k]);
}ll s[N],sz=0;
ll check(ll a,ll b,ll r){
ll x=b-a;
return w[a]+w[b]+get(b+x,r);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(ll i=1;i<=n;i++){
cin>>w[i];
st[i][0]=w[i];
}ll q;
cin>>q;
build();
for(ll i=1;i<=n;i++){
while(sz&&w[s[sz]]<=w[i]){
sz--;
}
l[i]=s[sz];
s[++sz]=i;
}
sz=0;
s[sz]=n+1;
for(ll i=n;i>=1;i--){
while(sz&&w[s[sz]]<w[i]){
sz--;
}
r[i]=s[sz];
s[++sz]=i;
}
while(q--){
ll L,R,ans=0;
cin>>L>>R;
for(ll i=L;i<=R-1;i++){
ans=max(ans,check(i,r[i],R));
if(L<=l[i])ans=max(ans,check(l[i],i,R));
}
cout<<ans<<'\n';
}
}
# | 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... |