import java.io.*;
import java.util.*;
final private int BUFFER_SIZE = 1 << 16;
private byte[] buffer;
private int bufferPointer, bytesRead;
{
buffer = new byte[BUFFER_SIZE];
bufferPointer = bytesRead = 0;
}
{
int ret = 0;
byte c = read();
while (c <= ' ') {
c = read();
}
boolean neg = (c == '-');
if (neg)
c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
if (neg)
return -ret;
return ret;
}
{
bytesRead = din.read(buffer, bufferPointer = 0,
BUFFER_SIZE);
if (bytesRead == -1)
buffer[0] = -1;
}
{
if (bufferPointer == bytesRead)
fillBuffer();
return buffer[bufferPointer++];
}
}
class Main{
static class Node{
long prefix, suffix;
long max;
long sum;
Node(){
prefix = suffix = max = sum = -15008;
}
Node(int s){
prefix = suffix = max = sum = s;
}
}
public static void build(int ind, int l, int r){
if( l==r){
segment[ind] = new Node(ar[l]);
return;
}
int mid = l+ (r-l)/2;
build(2*ind+1, l, mid);
build(2*ind+2, mid+1, r);
segment[ind] = new Node();
calulate(segment[ind], segment[2*ind+1], segment[2*ind+2]);
}
public static void calulate(Node res, Node left, Node right){
res.
prefix = Math.
max(left.
prefix, left.
sum+ right.
prefix); res.
suffix = Math.
max(right.
suffix, right.
sum+ left.
suffix); res.sum = left.sum + right.sum;
res.
max = Math.
max(left.
max, right.
max); res.
max = Math.
max(res.
max, left.
suffix+right.
prefix); }
public static Node query(int ind, int l, int r, int ql, int qr){
Node res = new Node();
if( r < ql || qr < l){
return res;
}
if( ql <= l && qr >= r){
return segment[ind];
}
int mid = l+ (r-l)/2;
if(ql>mid)
return query(2 * ind + 2, mid + 1, r, ql, qr);
else if(qr<=mid)
return query(2 * ind + 1, l, mid, ql, qr);
else {
Node left = query(2 * ind + 1, l, mid, ql, qr);
Node right = query(2 * ind + 2, mid + 1, r, ql, qr);
calulate(res, left, right);
return res;
}
}
static int[] ar;
static Node[] segment;
int n = ff.nextInt();
ar = new int[n];
segment = new Node[(4*n)+5];
for(int i = 0; i < n; i++){
ar[i] = ff.nextInt();
}
build(0, 0, n-1);
int q = ff.nextInt();
while(q-- > 0){
int l = ff.nextInt()-1;
int r = ff.nextInt()-1;
System.
out.
println(query
(0,
0, n
- 1, l, r
).
max); }
}
}
CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuKjsKCmNsYXNzIFJlYWRlciB7CiAgICBmaW5hbCBwcml2YXRlIGludCBCVUZGRVJfU0laRSA9IDEgPDwgMTY7CiAgICBwcml2YXRlIERhdGFJbnB1dFN0cmVhbSBkaW47CiAgICBwcml2YXRlIGJ5dGVbXSBidWZmZXI7CiAgICBwcml2YXRlIGludCBidWZmZXJQb2ludGVyLCBieXRlc1JlYWQ7CgogICAgcHVibGljIFJlYWRlcigpCiAgICB7CiAgICAgICAgZGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShTeXN0ZW0uaW4pOwogICAgICAgIGJ1ZmZlciA9IG5ldyBieXRlW0JVRkZFUl9TSVpFXTsKICAgICAgICBidWZmZXJQb2ludGVyID0gYnl0ZXNSZWFkID0gMDsKICAgIH0KCiAgICBwdWJsaWMgaW50IG5leHRJbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24KICAgIHsKICAgICAgICBpbnQgcmV0ID0gMDsKICAgICAgICBieXRlIGMgPSByZWFkKCk7CiAgICAgICAgd2hpbGUgKGMgPD0gJyAnKSB7CiAgICAgICAgICAgIGMgPSByZWFkKCk7CiAgICAgICAgfQogICAgICAgIGJvb2xlYW4gbmVnID0gKGMgPT0gJy0nKTsKICAgICAgICBpZiAobmVnKQogICAgICAgICAgICBjID0gcmVhZCgpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgcmV0ID0gcmV0ICogMTAgKyBjIC0gJzAnOwogICAgICAgIH0gd2hpbGUgKChjID0gcmVhZCgpKSA+PSAnMCcgJiYgYyA8PSAnOScpOwoKICAgICAgICBpZiAobmVnKQogICAgICAgICAgICByZXR1cm4gLXJldDsKICAgICAgICByZXR1cm4gcmV0OwogICAgfQogICAgcHJpdmF0ZSB2b2lkIGZpbGxCdWZmZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24KICAgIHsKICAgICAgICBieXRlc1JlYWQgPSBkaW4ucmVhZChidWZmZXIsIGJ1ZmZlclBvaW50ZXIgPSAwLAogICAgICAgICAgICAgICAgQlVGRkVSX1NJWkUpOwogICAgICAgIGlmIChieXRlc1JlYWQgPT0gLTEpCiAgICAgICAgICAgIGJ1ZmZlclswXSA9IC0xOwogICAgfQoKICAgIHByaXZhdGUgYnl0ZSByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uCiAgICB7CiAgICAgICAgaWYgKGJ1ZmZlclBvaW50ZXIgPT0gYnl0ZXNSZWFkKQogICAgICAgICAgICBmaWxsQnVmZmVyKCk7CiAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXJQb2ludGVyKytdOwogICAgfQp9CgpjbGFzcyBNYWluewogICAgc3RhdGljIGNsYXNzIE5vZGV7CiAgICAgICAgbG9uZyBwcmVmaXgsIHN1ZmZpeDsKICAgICAgICBsb25nIG1heDsKICAgICAgICBsb25nIHN1bTsKICAgICAgICBOb2RlKCl7CiAgICAgICAgICAgIHByZWZpeCA9IHN1ZmZpeCA9IG1heCA9IHN1bSA9IC0xNTAwODsKICAgICAgICB9CiAgICAgICAgTm9kZShpbnQgcyl7CiAgICAgICAgICAgIHByZWZpeCA9IHN1ZmZpeCA9IG1heCA9IHN1bSA9IHM7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBidWlsZChpbnQgaW5kLCBpbnQgbCwgaW50IHIpewogICAgICAgIGlmKCBsPT1yKXsKICAgICAgICAgICAgc2VnbWVudFtpbmRdID0gbmV3IE5vZGUoYXJbbF0pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSBsKyAoci1sKS8yOwogICAgICAgIGJ1aWxkKDIqaW5kKzEsIGwsIG1pZCk7CiAgICAgICAgYnVpbGQoMippbmQrMiwgbWlkKzEsIHIpOwoKICAgICAgICBzZWdtZW50W2luZF0gPSBuZXcgTm9kZSgpOwogICAgICAgIGNhbHVsYXRlKHNlZ21lbnRbaW5kXSwgc2VnbWVudFsyKmluZCsxXSwgc2VnbWVudFsyKmluZCsyXSk7CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2FsdWxhdGUoTm9kZSByZXMsIE5vZGUgbGVmdCwgTm9kZSByaWdodCl7CiAgICAgICAgcmVzLnByZWZpeCA9IE1hdGgubWF4KGxlZnQucHJlZml4LCBsZWZ0LnN1bSsgcmlnaHQucHJlZml4KTsKICAgICAgICByZXMuc3VmZml4ID0gTWF0aC5tYXgocmlnaHQuc3VmZml4LCByaWdodC5zdW0rIGxlZnQuc3VmZml4KTsKICAgICAgICByZXMuc3VtID0gbGVmdC5zdW0gKyByaWdodC5zdW07CiAgICAgICAgcmVzLm1heCA9IE1hdGgubWF4KGxlZnQubWF4LCByaWdodC5tYXgpOwogICAgICAgIHJlcy5tYXggPSBNYXRoLm1heChyZXMubWF4LCBsZWZ0LnN1ZmZpeCtyaWdodC5wcmVmaXgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgTm9kZSBxdWVyeShpbnQgaW5kLCBpbnQgbCwgaW50IHIsIGludCBxbCwgaW50IHFyKXsKICAgICAgICBOb2RlIHJlcyA9IG5ldyBOb2RlKCk7CiAgICAgICAgaWYoIHIgPCBxbCB8fCBxciA8IGwpewogICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgIH0KICAgICAgICBpZiggcWwgPD0gbCAmJiBxciA+PSByKXsKICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRbaW5kXTsKICAgICAgICB9CiAgICAgICAgaW50IG1pZCA9IGwrIChyLWwpLzI7CiAgICAgICAgaWYocWw+bWlkKQogICAgICAgICAgICByZXR1cm4gcXVlcnkoMiAqIGluZCArIDIsIG1pZCArIDEsIHIsIHFsLCBxcik7CgogICAgICAgIGVsc2UgaWYocXI8PW1pZCkKICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5KDIgKiBpbmQgKyAxLCBsLCBtaWQsIHFsLCBxcik7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIE5vZGUgbGVmdCA9IHF1ZXJ5KDIgKiBpbmQgKyAxLCBsLCBtaWQsIHFsLCBxcik7CiAgICAgICAgICAgIE5vZGUgcmlnaHQgPSBxdWVyeSgyICogaW5kICsgMiwgbWlkICsgMSwgciwgcWwsIHFyKTsKICAgICAgICAgICAgY2FsdWxhdGUocmVzLCBsZWZ0LCByaWdodCk7CiAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfQogICAgfQogICAgc3RhdGljIGludFtdIGFyOwogICAgc3RhdGljIE5vZGVbXSBzZWdtZW50OwogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICBSZWFkZXIgZmYgPSBuZXcgUmVhZGVyKCk7CiAgICAgICAgaW50IG4gPSBmZi5uZXh0SW50KCk7CiAgICAgICAgYXIgPSBuZXcgaW50W25dOwogICAgICAgIHNlZ21lbnQgPSBuZXcgTm9kZVsoNCpuKSs1XTsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICAgICAgYXJbaV0gPSBmZi5uZXh0SW50KCk7CiAgICAgICAgfQogICAgICAgIGJ1aWxkKDAsIDAsIG4tMSk7CiAgICAgICAgaW50IHEgPSBmZi5uZXh0SW50KCk7CgogICAgICAgIHdoaWxlKHEtLSA+IDApewogICAgICAgICAgICBpbnQgbCA9IGZmLm5leHRJbnQoKS0xOwogICAgICAgICAgICBpbnQgciA9IGZmLm5leHRJbnQoKS0xOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocXVlcnkoMCwgMCwgbiAtIDEsIGwsIHIpLm1heCk7CiAgICAgICAgfQogICAgfQp9