#include <bits/stdc++.h>
using namespace std;
#define SIZE 50000
#define MIN -16000
struct Array
{
long long int p;
long long int s;
long long int sub;
long long int t;
}tree[5*SIZE];
long long int n,a[SIZE];
void build(int node, int start, int end)
{
if(start==end)
{
tree[node].p = tree[node].s = tree[node].sub = tree[node].t = a[start];
}
else
{
int mid = (start + end)/2;
build(2*node, start, mid);
build(2*node + 1, mid + 1, end);
tree[node].p = max(tree[2*node].t + tree[2*node +1].p, tree[2*node].p);
tree[node].s = max(tree[2*node+1].t + tree[2*node].s , tree[2*node+1].s);
tree[node].sub = max(max(tree[2*node].sub, tree[2*node + 1].sub), tree[2*node].s+tree[2*node+1].p);
tree[node].t = tree[2*node].t + tree[2*node + 1].t;
}
}
Array query(int node, int start, int end, int l, int r)
{
Array a;
if(end < l || start > r)
{
a.p = a.s = a.sub = a.t = MIN;
return a;
}
if(start >= l && end <= r)
{
return tree[node];
}
int mid = (start + end)/2;
Array p1 = query(2*node, start, mid, l, r);
Array p2 = query(2*node +1, mid + 1, end, l, r);
if(p1.sub == MIN) return p2;
if(p2.sub == MIN) return p1;
a.p = max(p1.t + p2.p, p1.p);
a.s = max(p2.t + p1.s, p2.s);
a.sub = max(max(p1.sub,p2.sub),p1.s + p2.p);
a.t = p1.t + p2.t;
return a;
}
int main()
{
scanf("%lld",&n);
for(int i=0;i<n;++i)
scanf("%lld",&a[i]);
build(1,0,n-1);
int m;
scanf("%d",&m);
while(m--)
{
int l,r;
scanf("%d %d",&l,&r);
long long int result=query(1,0,n-1,l-1,r-1).sub;
cout<<result<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBTSVpFIDUwMDAwCiNkZWZpbmUgTUlOIC0xNjAwMAoKc3RydWN0IEFycmF5CnsKCWxvbmcgbG9uZyBpbnQgcDsKCWxvbmcgbG9uZyBpbnQgczsKCWxvbmcgbG9uZyBpbnQgc3ViOwoJbG9uZyBsb25nIGludCB0Owp9dHJlZVs1KlNJWkVdOwoKbG9uZyBsb25nIGludCBuLGFbU0laRV07Cgp2b2lkIGJ1aWxkKGludCBub2RlLCBpbnQgc3RhcnQsIGludCBlbmQpCnsKCWlmKHN0YXJ0PT1lbmQpCgl7CgkJdHJlZVtub2RlXS5wID0gdHJlZVtub2RlXS5zID0gdHJlZVtub2RlXS5zdWIgPSB0cmVlW25vZGVdLnQgPSBhW3N0YXJ0XTsKCX0KCWVsc2UKCXsKCQlpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKS8yOwoJCWJ1aWxkKDIqbm9kZSwgc3RhcnQsIG1pZCk7CgkJYnVpbGQoMipub2RlICsgMSwgbWlkICsgMSwgZW5kKTsKCQl0cmVlW25vZGVdLnAgPSBtYXgodHJlZVsyKm5vZGVdLnQgKyB0cmVlWzIqbm9kZSArMV0ucCwgdHJlZVsyKm5vZGVdLnApOwoJCXRyZWVbbm9kZV0ucyA9IG1heCh0cmVlWzIqbm9kZSsxXS50ICsgdHJlZVsyKm5vZGVdLnMgLCB0cmVlWzIqbm9kZSsxXS5zKTsKCQl0cmVlW25vZGVdLnN1YiA9IG1heChtYXgodHJlZVsyKm5vZGVdLnN1YiwgdHJlZVsyKm5vZGUgKyAxXS5zdWIpLCB0cmVlWzIqbm9kZV0ucyt0cmVlWzIqbm9kZSsxXS5wKTsKCQl0cmVlW25vZGVdLnQgPSB0cmVlWzIqbm9kZV0udCArIHRyZWVbMipub2RlICsgMV0udDsKCX0KfQoKQXJyYXkgcXVlcnkoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGwsIGludCByKQp7CglBcnJheSBhOwoJaWYoZW5kIDwgbCB8fCBzdGFydCA+IHIpCgl7CgkJYS5wID0gYS5zID0gYS5zdWIgPSBhLnQgPSBNSU47CgkJcmV0dXJuIGE7Cgl9CglpZihzdGFydCA+PSBsICYmIGVuZCA8PSByKQoJewoJCXJldHVybiB0cmVlW25vZGVdOwoJfQoJaW50IG1pZCA9IChzdGFydCArIGVuZCkvMjsKCUFycmF5IHAxID0gcXVlcnkoMipub2RlLCBzdGFydCwgbWlkLCBsLCByKTsKCUFycmF5IHAyID0gcXVlcnkoMipub2RlICsxLCBtaWQgKyAxLCBlbmQsIGwsIHIpOwoJaWYocDEuc3ViID09IE1JTikgcmV0dXJuIHAyOwoJaWYocDIuc3ViID09IE1JTikgcmV0dXJuIHAxOwoJYS5wID0gbWF4KHAxLnQgKyBwMi5wLCBwMS5wKTsKCWEucyA9IG1heChwMi50ICsgcDEucywgcDIucyk7CglhLnN1YiA9IG1heChtYXgocDEuc3ViLHAyLnN1YikscDEucyArIHAyLnApOwoJYS50ID0gcDEudCArIHAyLnQ7CglyZXR1cm4gYTsKfQoKaW50IG1haW4oKQp7CglzY2FuZigiJWxsZCIsJm4pOwoJZm9yKGludCBpPTA7aTxuOysraSkKCQlzY2FuZigiJWxsZCIsJmFbaV0pOwoJYnVpbGQoMSwwLG4tMSk7CglpbnQgbTsKCXNjYW5mKCIlZCIsJm0pOwoJd2hpbGUobS0tKQoJewoJCWludCBsLHI7CgkJc2NhbmYoIiVkICVkIiwmbCwmcik7CgkJbG9uZyBsb25nIGludCByZXN1bHQ9cXVlcnkoMSwwLG4tMSxsLTEsci0xKS5zdWI7CgkJY291dDw8cmVzdWx0PDxlbmRsOwoJfQoJcmV0dXJuIDA7Cn0=