#include<bits/stdc++.h>
using namespace std;
#define MAX 400000
#define lld long long int
struct node
{
lld data;
lld left;
lld right;
lld sum;
node()
{
data =-1000000000;
left =-1000000000;
right=-1000000000;
sum =-1000000000;
}
}tree[MAX];
lld a[100005];
void init(int i,int start,int end)
{
if(start==end)
{
tree[i].data = a[start];
tree[i].left = a[start];
tree[i].right = a[start];
tree[i].sum = a[start];
return;
}
int mid = (start+end)/2;
init(2*i,start,mid);
init(2*i+1,mid+1,end);
tree[i].sum = tree[2*i].sum + tree[2*i+1].sum;
tree[i].left = tree[2*i].sum;
tree[i].right = tree[2*i+1].sum;
tree[i].data = max(tree[i].sum,max(tree[i].left,tree[i].right));
tree[i].data = max(tree[i].data,max(tree[2*i].data,tree[2*i+1].data));
tree[i].data = max(tree[i].data,tree[2*i].right+tree[2*i+1].left);
}
node query(int i,int start,int end,int qs,int qe)
{
if(qs>end||qe<start)
{
node temp;
temp.data = 0;
return temp;
}
if(qs<=start&&qe>=end)
{
return tree[i];
}
int mid = (start+end)/2;
node id1 = query(2*i,start,mid,qs,qe);
node id2 = query(2*i+1,mid+1,end,qs,qe);
if(id1.data==0)return id2;
if(id2.data==0)return id1;
node r;
r.data = max(id1.data,max(id2.data,max(id1.sum,max(id2.sum,id1.right+id2.left))));
return r;
}
int main()
{
lld n,q;
int qs,qe;
scanf("%lld",&n);
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
init(1,0,n-1);
//for(int i=0;i<10;i++)
//cout<<tree[i].data<<" ";
scanf("%lld",&q);
while(q--)
{
scanf("%d%d",&qs,&qe);
qs--;qe--;
printf("%lld\n",query(1,0,n-1,qs,qe).data);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgTUFYIDQwMDAwMAojZGVmaW5lIGxsZCBsb25nIGxvbmcgaW50CgpzdHJ1Y3Qgbm9kZQp7CiAgICBsbGQgZGF0YTsKICAgIGxsZCBsZWZ0OwogICAgbGxkIHJpZ2h0OwogICAgbGxkIHN1bTsKCiAgICBub2RlKCkKICAgIHsKICAgICAgICBkYXRhID0tMTAwMDAwMDAwMDsKICAgICAgICBsZWZ0ID0tMTAwMDAwMDAwMDsKICAgICAgICByaWdodD0tMTAwMDAwMDAwMDsKICAgICAgICBzdW0gID0tMTAwMDAwMDAwMDsKICAgIH0KfXRyZWVbTUFYXTsKCmxsZCBhWzEwMDAwNV07Cgp2b2lkIGluaXQoaW50IGksaW50IHN0YXJ0LGludCBlbmQpCnsKICAgIGlmKHN0YXJ0PT1lbmQpCiAgICB7CiAgICAgICAgdHJlZVtpXS5kYXRhID0gYVtzdGFydF07CiAgICAgICAgdHJlZVtpXS5sZWZ0ID0gYVtzdGFydF07CiAgICAgICAgdHJlZVtpXS5yaWdodCA9IGFbc3RhcnRdOwogICAgICAgIHRyZWVbaV0uc3VtID0gYVtzdGFydF07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGludCBtaWQgPSAoc3RhcnQrZW5kKS8yOwoKICAgIGluaXQoMippLHN0YXJ0LG1pZCk7CiAgICBpbml0KDIqaSsxLG1pZCsxLGVuZCk7CgogICAgdHJlZVtpXS5zdW0gPSB0cmVlWzIqaV0uc3VtICsgdHJlZVsyKmkrMV0uc3VtOwogICAgdHJlZVtpXS5sZWZ0ID0gdHJlZVsyKmldLnN1bTsKICAgIHRyZWVbaV0ucmlnaHQgPSB0cmVlWzIqaSsxXS5zdW07CgogICAgdHJlZVtpXS5kYXRhID0gbWF4KHRyZWVbaV0uc3VtLG1heCh0cmVlW2ldLmxlZnQsdHJlZVtpXS5yaWdodCkpOwogICAgdHJlZVtpXS5kYXRhID0gbWF4KHRyZWVbaV0uZGF0YSxtYXgodHJlZVsyKmldLmRhdGEsdHJlZVsyKmkrMV0uZGF0YSkpOwogICAgdHJlZVtpXS5kYXRhID0gbWF4KHRyZWVbaV0uZGF0YSx0cmVlWzIqaV0ucmlnaHQrdHJlZVsyKmkrMV0ubGVmdCk7Cgp9Cm5vZGUgcXVlcnkoaW50IGksaW50IHN0YXJ0LGludCBlbmQsaW50IHFzLGludCBxZSkKewogICAgaWYocXM+ZW5kfHxxZTxzdGFydCkKICAgIHsKICAgICAgICBub2RlIHRlbXA7CiAgICAgICAgdGVtcC5kYXRhID0gMDsKICAgICAgICByZXR1cm4gdGVtcDsKICAgIH0KICAgIGlmKHFzPD1zdGFydCYmcWU+PWVuZCkKICAgIHsKICAgICAgICByZXR1cm4gdHJlZVtpXTsKICAgIH0KCiAgICBpbnQgbWlkID0gKHN0YXJ0K2VuZCkvMjsKCiAgICBub2RlIGlkMSA9IHF1ZXJ5KDIqaSxzdGFydCxtaWQscXMscWUpOwogICAgbm9kZSBpZDIgPSBxdWVyeSgyKmkrMSxtaWQrMSxlbmQscXMscWUpOwoKICAgIGlmKGlkMS5kYXRhPT0wKXJldHVybiBpZDI7CiAgICBpZihpZDIuZGF0YT09MClyZXR1cm4gaWQxOwoKICAgIG5vZGUgcjsKCiAgICByLmRhdGEgPSBtYXgoaWQxLmRhdGEsbWF4KGlkMi5kYXRhLG1heChpZDEuc3VtLG1heChpZDIuc3VtLGlkMS5yaWdodCtpZDIubGVmdCkpKSk7CgogICAgcmV0dXJuIHI7Cn0KaW50IG1haW4oKQp7CgogICAgbGxkIG4scTsKICAgIGludCBxcyxxZTsKICAgIHNjYW5mKCIlbGxkIiwmbik7CgogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgIHNjYW5mKCIlbGxkIiwmYVtpXSk7CgogICAgaW5pdCgxLDAsbi0xKTsKICAgIC8vZm9yKGludCBpPTA7aTwxMDtpKyspCiAgICAvL2NvdXQ8PHRyZWVbaV0uZGF0YTw8IiAiOwogICAgc2NhbmYoIiVsbGQiLCZxKTsKICAgIHdoaWxlKHEtLSkKICAgIHsKICAgICAgICBzY2FuZigiJWQlZCIsJnFzLCZxZSk7CiAgICAgICAgcXMtLTtxZS0tOwoKICAgICAgICBwcmludGYoIiVsbGRcbiIscXVlcnkoMSwwLG4tMSxxcyxxZSkuZGF0YSk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=