#include <bits/stdc++.h>
using namespace std;
struct node
{
int total;
int left;
int right;
int best;
};
struct node* st = new node[4*50000];
struct node merge(struct node l1, struct node r1)
{
struct node ans;
ans.total = l1.total+r1.total;
ans.left = max(l1.left, l1.total+r1.left);
ans.right = max(r1.right, r1.total+l1.right);
ans.best = max(max(l1.best, r1.best), l1.right+r1.left);
return ans;
}
struct node answer(int ss, int se, int l, int r, int i)
{
if(r<ss || l>se)
{
struct node ret;
ret.total = 0;
ret.left = -999999;
ret.right = -999999;
ret.best = -999999;
return ret;
}
if (l <= ss && r >= se)
return st[i];
int mid = ss+(se-ss)/2;
struct node l1 = answer(ss, mid, l , r, 2*i+1);
struct node r1 = answer(mid+1, se, l, r, 2*i+2);
struct node ans = merge(l1, r1);
return ans;
}
void construct(int arr[], int ss, int se, int i)
{
if(ss==se)
{
st[i].total = arr[ss];
st[i].left = arr[ss];
st[i].right = arr[ss];
st[i].best = arr[ss];
return ;
}
int mid = ss+(se-ss)/2;
construct(arr, ss, mid, 2*i+1);
construct(arr, mid+1, se, 2*i+2);
struct node l1 = st[2*i+1];
struct node r1 = st[2*i+2];
st[i] = merge(l1, r1);
return ;
}
void constructST(int arr[], int n)
{
construct(arr, 0, n-1, 0);
return;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin>>n;
int arr[n];
for(int i=0; i<n ;i++)
{
cin>>arr[i];
}
int m;
cin >>m;
while(m--)
{
int x, y;
cin >> x>>y;
constructST(arr, n);
struct node ans = answer(0 , n-1, x-1 ,y-1, 0);
cout << max(max(ans.total, ans.best), max(ans.left, ans.right)) <<"\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3Qgbm9kZQp7CiAgICBpbnQgdG90YWw7CiAgICBpbnQgbGVmdDsKICAgIGludCByaWdodDsgCiAgICBpbnQgYmVzdDsKfTsKCnN0cnVjdCBub2RlKiBzdCA9IG5ldyBub2RlWzQqNTAwMDBdOwoKc3RydWN0IG5vZGUgbWVyZ2Uoc3RydWN0IG5vZGUgbDEsIHN0cnVjdCBub2RlIHIxKQp7CiAgICBzdHJ1Y3Qgbm9kZSBhbnM7CiAgICAKICAgIGFucy50b3RhbCA9IGwxLnRvdGFsK3IxLnRvdGFsOwogICAgYW5zLmxlZnQgPSBtYXgobDEubGVmdCwgbDEudG90YWwrcjEubGVmdCk7CiAgICBhbnMucmlnaHQgPSBtYXgocjEucmlnaHQsIHIxLnRvdGFsK2wxLnJpZ2h0KTsKICAgIGFucy5iZXN0ID0gbWF4KG1heChsMS5iZXN0LCByMS5iZXN0KSwgbDEucmlnaHQrcjEubGVmdCk7CiAgICByZXR1cm4gYW5zOwp9CgpzdHJ1Y3Qgbm9kZSBhbnN3ZXIoaW50IHNzLCBpbnQgc2UsIGludCBsLCBpbnQgciwgaW50IGkpCnsKCWlmKHI8c3MgfHwgbD5zZSkKCXsKCSAgICBzdHJ1Y3Qgbm9kZSByZXQ7CgkgICAgcmV0LnRvdGFsID0gMDsKCSAgICByZXQubGVmdCA9IC05OTk5OTk7CgkgICAgcmV0LnJpZ2h0ID0gLTk5OTk5OTsKCSAgICByZXQuYmVzdCA9IC05OTk5OTk7CgkgICAgcmV0dXJuIHJldDsKCX0KCQoJaWYgKGwgPD0gc3MgJiYgciA+PSBzZSkgCiAgICAgICAgcmV0dXJuIHN0W2ldOwogICAgICAgIAogICAgaW50IG1pZCA9IHNzKyhzZS1zcykvMjsgCiAgICBzdHJ1Y3Qgbm9kZSBsMSA9IGFuc3dlcihzcywgbWlkLCBsICwgciwgMippKzEpOwogICAgc3RydWN0IG5vZGUgcjEgPSBhbnN3ZXIobWlkKzEsIHNlLCBsLCByLCAyKmkrMik7CiAgICAKICAgIHN0cnVjdCBub2RlIGFucyA9IG1lcmdlKGwxLCByMSk7CiAgICByZXR1cm4gYW5zOwp9Cgp2b2lkIGNvbnN0cnVjdChpbnQgYXJyW10sIGludCBzcywgaW50IHNlLCBpbnQgaSkKewoJaWYoc3M9PXNlKQoJewoJCXN0W2ldLnRvdGFsID0gYXJyW3NzXTsKCQlzdFtpXS5sZWZ0ID0gYXJyW3NzXTsKCQlzdFtpXS5yaWdodCA9IGFycltzc107CgkJc3RbaV0uYmVzdCA9IGFycltzc107CgkJcmV0dXJuIDsKCX0KCQoJaW50IG1pZCA9IHNzKyhzZS1zcykvMjsKCQoJY29uc3RydWN0KGFyciwgc3MsIG1pZCwgMippKzEpOwoJY29uc3RydWN0KGFyciwgbWlkKzEsIHNlLCAyKmkrMik7CgkKCXN0cnVjdCBub2RlIGwxID0gc3RbMippKzFdOwoJc3RydWN0IG5vZGUgcjEgPSBzdFsyKmkrMl07CgkKICAgIHN0W2ldID0gbWVyZ2UobDEsIHIxKTsKICAgIAoJcmV0dXJuIDsKfQogCnZvaWQgY29uc3RydWN0U1QoaW50IGFycltdLCBpbnQgbikKewoJY29uc3RydWN0KGFyciwgMCwgbi0xLCAwKTsKCXJldHVybjsKfSAKIAppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZShOVUxMKTsKCWludCBuOwoJY2luPj5uOwogICAgCiAgICBpbnQgYXJyW25dOwoJZm9yKGludCBpPTA7IGk8biA7aSsrKQoJewoJCWNpbj4+YXJyW2ldOwoJfQoJCglpbnQgbTsKCWNpbiA+Pm07CgkKCXdoaWxlKG0tLSkKCXsKCQlpbnQgeCwgeTsKCQljaW4gPj4geD4+eTsKCQkKCQljb25zdHJ1Y3RTVChhcnIsIG4pOwoJCQoJCXN0cnVjdCBub2RlIGFucyA9IGFuc3dlcigwICwgbi0xLCB4LTEgLHktMSwgMCk7CgkJCgkJY291dCA8PCBtYXgobWF4KGFucy50b3RhbCwgYW5zLmJlc3QpLCBtYXgoYW5zLmxlZnQsIGFucy5yaWdodCkpIDw8IlxuIjsKCX0KCQoJcmV0dXJuIDA7Cn0g