#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
ll sum,max,psum,ssum;
};
node stree[2000000];
int a[2000000];
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].ssum=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(qr<l||ql>r){
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});
return mynode;
}
int main(){
ll n;
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,b,0);
cout<<nod.max<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IG5vZGV7CglsbCBzdW0sbWF4LHBzdW0sc3N1bTsKfTsKbm9kZSBzdHJlZVsyMDAwMDAwXTsKaW50IGFbMjAwMDAwMF07CnZvaWQgY29uc3RydWN0KGludCBsLGludCByLGludCBwKXsKCWlmKGw9PXIpewoJCXN0cmVlW3BdLnN1bT1hW2xdOwoJCXN0cmVlW3BdLm1heD1hW2xdOwoJCXN0cmVlW3BdLnBzdW09YVtsXTsKCQlzdHJlZVtwXS5zc3VtPWFbbF07CgkJcmV0dXJuOwoJfQoJZWxzZXsKCQlpbnQgbWlkPShsK3IpLzI7CgkJY29uc3RydWN0KGwsbWlkLDIqcCsxKTsKCQljb25zdHJ1Y3QobWlkKzEsciwyKnArMik7Cgl9CglzdHJlZVtwXS5wc3VtPW1heChzdHJlZVsyKnArMV0ucHN1bSxzdHJlZVsyKnArMV0uc3VtK3N0cmVlWzIqcCsyXS5wc3VtKTsKCXN0cmVlW3BdLnNzdW09bWF4KHN0cmVlWzIqcCsyXS5zc3VtLHN0cmVlWzIqcCsyXS5zdW0rc3RyZWVbMipwKzFdLnNzdW0pOwoJc3RyZWVbcF0uc3N1bT1zdHJlZVsyKnArMl0uc3VtK3N0cmVlWzIqcCsxXS5zdW07CglzdHJlZVtwXS5tYXg9bWF4KHtzdHJlZVtwXS5wc3VtLHN0cmVlW3BdLnNzdW0sc3RyZWVbMipwKzFdLm1heCxzdHJlZVsyKnArMl0ubWF4LHN0cmVlWzIqcCsxXS5zc3VtK3N0cmVlWzIqcCsyXS5wc3VtfSk7Cn0Kbm9kZSBxdWVyeShpbnQgbCxpbnQgcixpbnQgcWwsaW50IHFyLGludCBwKXsKCWlmKHFyPGx8fHFsPnIpewoJCXJldHVybiAobm9kZSl7LTEwMDAwMCwtMTAwMDAwLC0xMDAwMDAsLTEwMDAwMH07Cgl9CglpZihxcjw9ciYmcWw+PWwpewoJCXJldHVybiBzdHJlZVtwXTsKCX0KCWludCBtaWQ9KGwrcikvMjsKCW5vZGUgbGVmdD0JcXVlcnkobCxtaWQscWwscXIsMipwKzEpOwoJbm9kZSByaWdodD0JcXVlcnkobWlkKzEscixxbCxxciwyKnArMik7Cglub2RlIG15bm9kZTsKCQoJbXlub2RlLnN1bT1sZWZ0LnN1bStyaWdodC5zdW07CglteW5vZGUucHN1bT1tYXgobGVmdC5wc3VtLGxlZnQuc3VtK3JpZ2h0LnBzdW0pOwoJbXlub2RlLnNzdW09bWF4KHJpZ2h0LnNzdW0scmlnaHQuc3VtK2xlZnQuc3N1bSk7CglteW5vZGUubWF4PW1heCh7bGVmdC5tYXgscmlnaHQubWF4LGxlZnQuc3N1bStyaWdodC5wc3VtfSk7CgkKCXJldHVybiBteW5vZGU7CgkKfQoKaW50IG1haW4oKXsKCWxsIG47CgljaW4+Pm47Cglmb3IoaW50IGk9MDtpPG47aSsrKXsKCQljaW4+PmFbaV07Cgl9Cgljb25zdHJ1Y3QoMCxuLTEsMCk7CglpbnQgbTsKCWNpbj4+bTsKCXdoaWxlKG0tLSl7CgkJaW50IGEsYjsKCQljaW4+PmE+PmI7CgkJbm9kZSBub2Q9cXVlcnkoMCxuLTEsYSxiLDApOwoJCWNvdXQ8PG5vZC5tYXg8PGVuZGw7Cgl9CgkKCXJldHVybiAwOwp9