#include<stdio.h>
#define INF -99999999
typedef long long ll;
ll arr[50009],tree[500000];
void create(ll node,ll left,ll right)
{
if(left==right)
{
tree[node]=arr[left];
return;
}
ll mid=left+right;
mid/=2;
create(2*node+1,left,mid);
create(2*node+2,mid+1,right);
tree[node]=tree[2*node+1]+tree[2*node+2];
}
ll query(ll node,ll left,ll right,ll i,ll j) //left and right = interval,,,i and j are present interval and changeable
{
if(i>j || i>right || j<left) //completely outside of required interval
return INF;
if(i==j && i>=left && j<=right) //single element interval inside required interval must be maximum of that interval
return tree[node];
ll max;
if(i>=left && j<=right && i<=j) //Inside interval
{
max=tree[node];
}
else
max=INF;
ll mid=i+j;
mid/=2;
ll a=query(2*node+1,left,right,i,mid); //finding max in left sub-tree
ll b=query(2*node+2,left,right,mid+1,j); //finding max in right sub-tree
if(a>max)
max=a;
if(b>max)
max=b;
return max;
//printf("HII:i = %lld j = %lld\nHii:left = %lld right = %lld\n",i,j,left,right);
}
int main()
{
ll n,q,a,b;
scanf("%lld",&n);
for(int i=0;i<n;i++)
scanf("%lld",&arr[i]);
create(1,0,n-1);
scanf("%lld",&q);
while(q--)
{
scanf("%lld%lld",&a,&b);
a--;
b--;
printf("%lld\n",query(1,a,b,0,n-1));
}
}
I2luY2x1ZGU8c3RkaW8uaD4KI2RlZmluZSBJTkYgLTk5OTk5OTk5CnR5cGVkZWYgbG9uZyBsb25nIGxsOwpsbCBhcnJbNTAwMDldLHRyZWVbNTAwMDAwXTsKdm9pZCBjcmVhdGUobGwgbm9kZSxsbCBsZWZ0LGxsIHJpZ2h0KQp7CglpZihsZWZ0PT1yaWdodCkKCXsKCQl0cmVlW25vZGVdPWFycltsZWZ0XTsKCQlyZXR1cm47Cgl9CglsbCBtaWQ9bGVmdCtyaWdodDsKCW1pZC89MjsKCWNyZWF0ZSgyKm5vZGUrMSxsZWZ0LG1pZCk7CgljcmVhdGUoMipub2RlKzIsbWlkKzEscmlnaHQpOwoJdHJlZVtub2RlXT10cmVlWzIqbm9kZSsxXSt0cmVlWzIqbm9kZSsyXTsKfQpsbCBxdWVyeShsbCBub2RlLGxsIGxlZnQsbGwgcmlnaHQsbGwgaSxsbCBqKQkvL2xlZnQgYW5kIHJpZ2h0ID0gaW50ZXJ2YWwsLCxpIGFuZCBqIGFyZSBwcmVzZW50IGludGVydmFsIGFuZCBjaGFuZ2VhYmxlCnsKCWlmKGk+aiB8fCBpPnJpZ2h0IHx8IGo8bGVmdCkJCS8vY29tcGxldGVseSBvdXRzaWRlIG9mIHJlcXVpcmVkIGludGVydmFsCgkJcmV0dXJuIElORjsKCWlmKGk9PWogJiYgaT49bGVmdCAmJiBqPD1yaWdodCkJCS8vc2luZ2xlIGVsZW1lbnQgaW50ZXJ2YWwgaW5zaWRlIHJlcXVpcmVkIGludGVydmFsIG11c3QgYmUgbWF4aW11bSBvZiB0aGF0IGludGVydmFsCgkJcmV0dXJuIHRyZWVbbm9kZV07CglsbCBtYXg7CglpZihpPj1sZWZ0ICYmIGo8PXJpZ2h0ICYmIGk8PWopCQkvL0luc2lkZSBpbnRlcnZhbAoJewoJCW1heD10cmVlW25vZGVdOwoJfQoJZWxzZQoJCW1heD1JTkY7CglsbCBtaWQ9aStqOwoJCW1pZC89MjsKCWxsIGE9cXVlcnkoMipub2RlKzEsbGVmdCxyaWdodCxpLG1pZCk7CQkvL2ZpbmRpbmcgbWF4IGluIGxlZnQgc3ViLXRyZWUKCWxsIGI9cXVlcnkoMipub2RlKzIsbGVmdCxyaWdodCxtaWQrMSxqKTsJLy9maW5kaW5nIG1heCBpbiByaWdodCBzdWItdHJlZQoJCglpZihhPm1heCkKCQltYXg9YTsKCWlmKGI+bWF4KQoJCW1heD1iOwoJcmV0dXJuIG1heDsKCS8vcHJpbnRmKCJISUk6aSA9ICVsbGQgaiA9ICVsbGRcbkhpaTpsZWZ0ID0gJWxsZCByaWdodCA9ICVsbGRcbiIsaSxqLGxlZnQscmlnaHQpOwp9CmludCBtYWluKCkKewoJbGwgbixxLGEsYjsKCXNjYW5mKCIlbGxkIiwmbik7Cglmb3IoaW50IGk9MDtpPG47aSsrKQoJCXNjYW5mKCIlbGxkIiwmYXJyW2ldKTsKCWNyZWF0ZSgxLDAsbi0xKTsKCXNjYW5mKCIlbGxkIiwmcSk7Cgl3aGlsZShxLS0pCgl7CgkJc2NhbmYoIiVsbGQlbGxkIiwmYSwmYik7CgkJYS0tOwoJCWItLTsKCQlwcmludGYoIiVsbGRcbiIscXVlcnkoMSxhLGIsMCxuLTEpKTsKCX0KfQ==