#include<stdio.h>
#include<math.h>
typedef int ull;
#define MAX 100000
ull max;
ull arr[MAX];
ull constructF(ull ss,ull se,ull *st,ull si)
{
if(ss==se)
{
st[si]=arr[ss];
return st[si];
}
ull mid=(se+ss)/2;
st[si]=constructF(ss,mid,st,2*si+1)+constructF(mid+1,se,st,2*si+2);
return st[si];
}
ull *construct(ull n)
{
ull x=(ceil(log2(n)));
ull max_size=2*pow(2,x)-1;
ull *st=new ull[max_size];
constructF(0,n-1,st,0);
return st;
}
ull getSumF(ull *st,ull ss,ull se,ull qs,ull qe,ull index)
{
if(ss>=qs&&se<=qe)
{
if(max<st[index])
max=st[index];
if(ss!=se)
{
ull mid=(ss+se)/2;
getSumF(st,ss,mid,qs,qe,2*index+1);
getSumF(st,mid+1,se,qs,qe,2*index+2);
}
return st[index];
}
if(se<qs||ss>qe)
{
return 0;
}
ull mid = (se+ss)/2;
ull val=getSumF(st,ss,mid,qs,qe,2*index+1)+getSumF(st,mid+1,se,qs,qe,2*mid+2);
if(max<val)
max=val;
return val;
}
/*ull getSum(ull arr[],ull *st,ull n,ull qs,ull qe)
{
if(qs<0||qe>n-1||qs>qe)
return 0;
}*/
int main()
{
ull n;
scanf("%d",&n);
for(ull i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
ull m;
scanf("%d",&m);
ull *st=construct(n);
while(m--)
{
ull x,y;
max=-10000;
scanf("%d%d",&x,&y);
//getSum(arr,st,n,x-1,y-1);
getSumF(st,0,n-1,x-1,y-1,0);
printf("%d\n",max);
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWF0aC5oPgoKdHlwZWRlZiBpbnQgdWxsOwoKI2RlZmluZSBNQVggMTAwMDAwCnVsbCBtYXg7CnVsbCBhcnJbTUFYXTsKdWxsIGNvbnN0cnVjdEYodWxsIHNzLHVsbCBzZSx1bGwgKnN0LHVsbCBzaSkKewogICAgaWYoc3M9PXNlKQogICAgewogICAgICAgIHN0W3NpXT1hcnJbc3NdOwogICAgICAgIHJldHVybiBzdFtzaV07CiAgICB9CgogICAgdWxsIG1pZD0oc2Urc3MpLzI7CgogICAgc3Rbc2ldPWNvbnN0cnVjdEYoc3MsbWlkLHN0LDIqc2krMSkrY29uc3RydWN0RihtaWQrMSxzZSxzdCwyKnNpKzIpOwoKICAgIHJldHVybiBzdFtzaV07Cn0KCnVsbCAqY29uc3RydWN0KHVsbCBuKQp7CiAgICB1bGwgeD0oY2VpbChsb2cyKG4pKSk7CiAgICB1bGwgbWF4X3NpemU9Mipwb3coMix4KS0xOwogICAgdWxsICpzdD1uZXcgdWxsW21heF9zaXplXTsKCiAgICBjb25zdHJ1Y3RGKDAsbi0xLHN0LDApOwogICAgcmV0dXJuIHN0Owp9Cgp1bGwgZ2V0U3VtRih1bGwgKnN0LHVsbCBzcyx1bGwgc2UsdWxsIHFzLHVsbCBxZSx1bGwgaW5kZXgpCnsKICAgIGlmKHNzPj1xcyYmc2U8PXFlKQogICAgewogICAgICAgIGlmKG1heDxzdFtpbmRleF0pCiAgICAgICAgICAgIG1heD1zdFtpbmRleF07CiAgICAgICAgaWYoc3MhPXNlKQogICAgICAgIHsKICAgICAgICAgICAgdWxsIG1pZD0oc3Mrc2UpLzI7CiAgICAgICAgICAgIGdldFN1bUYoc3Qsc3MsbWlkLHFzLHFlLDIqaW5kZXgrMSk7CiAgICAgICAgICAgIGdldFN1bUYoc3QsbWlkKzEsc2UscXMscWUsMippbmRleCsyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0W2luZGV4XTsKICAgIH0KCiAgICBpZihzZTxxc3x8c3M+cWUpCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICB1bGwgbWlkID0gKHNlK3NzKS8yOwogICAgdWxsIHZhbD1nZXRTdW1GKHN0LHNzLG1pZCxxcyxxZSwyKmluZGV4KzEpK2dldFN1bUYoc3QsbWlkKzEsc2UscXMscWUsMiptaWQrMik7CiAgICBpZihtYXg8dmFsKQogICAgICAgIG1heD12YWw7CgogICAgcmV0dXJuIHZhbDsKfQovKnVsbCBnZXRTdW0odWxsIGFycltdLHVsbCAqc3QsdWxsIG4sdWxsIHFzLHVsbCBxZSkKewogICAgaWYocXM8MHx8cWU+bi0xfHxxcz5xZSkKICAgICAgICByZXR1cm4gMDsKCgp9Ki8KaW50IG1haW4oKQp7CiAgICB1bGwgbjsKICAgIHNjYW5mKCIlZCIsJm4pOwoKICAgIGZvcih1bGwgaT0wO2k8bjtpKyspCiAgICB7CiAgICAgICAgc2NhbmYoIiVkIiwmYXJyW2ldKTsKICAgIH0KICAgIHVsbCBtOwogICAgc2NhbmYoIiVkIiwmbSk7CiAgICB1bGwgKnN0PWNvbnN0cnVjdChuKTsKICAgIHdoaWxlKG0tLSkKICAgIHsKICAgICAgICB1bGwgeCx5OwogICAgICAgIG1heD0tMTAwMDA7CiAgICAgICAgc2NhbmYoIiVkJWQiLCZ4LCZ5KTsKICAgICAgICAvL2dldFN1bShhcnIsc3Qsbix4LTEseS0xKTsKICAgICAgICBnZXRTdW1GKHN0LDAsbi0xLHgtMSx5LTEsMCk7CiAgICAgICAgcHJpbnRmKCIlZFxuIixtYXgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K