#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
ll sum,max,psum,ssum;
};
node stree[2000000];
int a[2000000];
int n;
void construct(int l,int r,int p){
if(l==r){
stree[p].sum=a[l];
stree[p].max=a[l];
stree[p].psum=a[l];
stree[p].ssum=a[l];
return;
}
else{
int mid=(l+r)/2;
construct(l,mid,2*p+1);
construct(mid+1,r,2*p+2);
}
stree[p].psum=max(stree[2*p+1].psum,stree[2*p+1].sum+stree[2*p+2].psum);
stree[p].ssum=max(stree[2*p+2].ssum,stree[2*p+2].sum+stree[2*p+1].ssum);
stree[p].sum=stree[2*p+2].sum+stree[2*p+1].sum;
stree[p].max=max({stree[p].psum,stree[p].ssum,stree[2*p+1].max,stree[2*p+2].max,stree[2*p+1].ssum+stree[2*p+2].psum});
}
node query(int l,int r,int ql,int qr,int p){
if(r>=n||l<0||l>r||ql>r||qr<l){
return (node){-100000,-100000,-100000,-100000};
}
if(qr>=r&&ql<=l){
return stree[p];
}
int mid=(l+r)/2;
node left= query(l,mid,ql,qr,2*p+1);
node right= query(mid+1,r,ql,qr,2*p+2);
node mynode;
mynode.sum=left.sum+right.sum;
mynode.psum=max(left.psum,left.sum+right.psum);
mynode.ssum=max(right.ssum,right.sum+left.ssum);
mynode.max=max({left.max,right.max,left.ssum+right.psum,mynode.psum,mynode.ssum});
return mynode;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
construct(0,n-1,0);
int m;
cin>>m;
while(m--){
int a,b;
cin>>a>>b;
node nod=query(0,n-1,a-1,b-1,0);
cout<<nod.max<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IG5vZGV7CglsbCBzdW0sbWF4LHBzdW0sc3N1bTsKfTsKbm9kZSBzdHJlZVsyMDAwMDAwXTsKaW50IGFbMjAwMDAwMF07CmludCBuOwp2b2lkIGNvbnN0cnVjdChpbnQgbCxpbnQgcixpbnQgcCl7CglpZihsPT1yKXsKCQlzdHJlZVtwXS5zdW09YVtsXTsKCQlzdHJlZVtwXS5tYXg9YVtsXTsKCQlzdHJlZVtwXS5wc3VtPWFbbF07CgkJc3RyZWVbcF0uc3N1bT1hW2xdOwoJCXJldHVybjsKCX0KCWVsc2V7CgkJaW50IG1pZD0obCtyKS8yOwoJCWNvbnN0cnVjdChsLG1pZCwyKnArMSk7CgkJY29uc3RydWN0KG1pZCsxLHIsMipwKzIpOwoJfQoJc3RyZWVbcF0ucHN1bT1tYXgoc3RyZWVbMipwKzFdLnBzdW0sc3RyZWVbMipwKzFdLnN1bStzdHJlZVsyKnArMl0ucHN1bSk7CglzdHJlZVtwXS5zc3VtPW1heChzdHJlZVsyKnArMl0uc3N1bSxzdHJlZVsyKnArMl0uc3VtK3N0cmVlWzIqcCsxXS5zc3VtKTsKCXN0cmVlW3BdLnN1bT1zdHJlZVsyKnArMl0uc3VtK3N0cmVlWzIqcCsxXS5zdW07CglzdHJlZVtwXS5tYXg9bWF4KHtzdHJlZVtwXS5wc3VtLHN0cmVlW3BdLnNzdW0sc3RyZWVbMipwKzFdLm1heCxzdHJlZVsyKnArMl0ubWF4LHN0cmVlWzIqcCsxXS5zc3VtK3N0cmVlWzIqcCsyXS5wc3VtfSk7Cn0Kbm9kZSBxdWVyeShpbnQgbCxpbnQgcixpbnQgcWwsaW50IHFyLGludCBwKXsKCWlmKHI+PW58fGw8MHx8bD5yfHxxbD5yfHxxcjxsKXsKCQlyZXR1cm4gKG5vZGUpey0xMDAwMDAsLTEwMDAwMCwtMTAwMDAwLC0xMDAwMDB9OwoJfQoJaWYocXI+PXImJnFsPD1sKXsKCQlyZXR1cm4gc3RyZWVbcF07Cgl9CglpbnQgbWlkPShsK3IpLzI7Cglub2RlIGxlZnQ9CXF1ZXJ5KGwsbWlkLHFsLHFyLDIqcCsxKTsKCW5vZGUgcmlnaHQ9CXF1ZXJ5KG1pZCsxLHIscWwscXIsMipwKzIpOwoJbm9kZSBteW5vZGU7CgoKCW15bm9kZS5zdW09bGVmdC5zdW0rcmlnaHQuc3VtOwoJbXlub2RlLnBzdW09bWF4KGxlZnQucHN1bSxsZWZ0LnN1bStyaWdodC5wc3VtKTsKCW15bm9kZS5zc3VtPW1heChyaWdodC5zc3VtLHJpZ2h0LnN1bStsZWZ0LnNzdW0pOwoJbXlub2RlLm1heD1tYXgoe2xlZnQubWF4LHJpZ2h0Lm1heCxsZWZ0LnNzdW0rcmlnaHQucHN1bSxteW5vZGUucHN1bSxteW5vZGUuc3N1bX0pOwoKCXJldHVybiBteW5vZGU7Cgp9CgppbnQgbWFpbigpewoJY2luPj5uOwoJZm9yKGludCBpPTA7aTxuO2krKyl7CgkJY2luPj5hW2ldOwoJfQoJY29uc3RydWN0KDAsbi0xLDApOwoJaW50IG07CgljaW4+Pm07Cgl3aGlsZShtLS0pewoJCWludCBhLGI7CgkJY2luPj5hPj5iOwoJCW5vZGUgbm9kPXF1ZXJ5KDAsbi0xLGEtMSxiLTEsMCk7CgkJY291dDw8bm9kLm1heDw8ZW5kbDsKCX0KCglyZXR1cm4gMDsKfQ==