import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private int[] array;
private NodeI[] heap;
int size;
MyScanner sc = new MyScanner();
int i = 0, N, Q, l, r;
long answer;
N = sc.nextInt();
int[] array = new int[N];
while (i < N) {
array[i++] = sc.nextInt();
}
Main gss1 = new Main(array);
Q = sc.nextInt();
i = 0;
while (i++ < Q) {
l = sc.nextInt();
r = sc.nextInt();
answer = gss1.query(1, l - 1, r - 1).getMS();
out.println(answer + "\n");
}
}
public static class MyScanner {
public MyScanner() {
}
while (st == null || !st.hasMoreElements()) {
try {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt
() { return Integer.
parseInt(next
()); } }
class NodeI {
int from, to, len;
long pre, suf, sum, mS;
public NodeI() {
}
NodeI(int from, int to, int len) {
this.from = from;
this.to = to;
this.len = len;
}
NodeI(NodeI node) {
this.from = node.from;
this.to = node.to;
this.len = node.len;
this.pre = node.pre;
this.suf = node.suf;
this.sum = node.sum;
this.mS = node.mS;
}
long getMS() { return mS; }
void setMS(long mS) { this.mS = mS; }
long getSum() {
return sum;
}
void setSum(long sum) {
this.sum = sum;
}
long getSuf() {
return suf;
}
void setSuf(long suf) {
this.suf = suf;
}
void setPre(long pre) {
this.pre = pre;
}
}
void initLeaf
(int n,
Integer integer
) { NodeI node = heap[n];
int index = node.from;
int value = array[index];
node.setPre(value);
node.setSuf(value);
node.setSum(value);
node.setMS(value);
}
NodeI balance(NodeI node, NodeI lft, NodeI ryt) {
node.
setPre(Math.
max(lft.
pre, lft.
getSum() + ryt.
pre)); node.
setSuf(Math.
max(ryt.
getSuf(), ryt.
getSum() + lft.
getSuf())); node.
setMS(Math.
max(Math.
max(lft.
getMS(), ryt.
getMS()), lft.
getSuf() + ryt.
pre)); node.setSum(lft.getSum() + ryt.getSum());
return node;
}
Main(int[] array) {
this.
array = Arrays.
copyOf(array, array.
length); this.
size = ((int)Math.
pow(2.0,
Math.
floor((Math.
log((double)array.
length)/Math.
log(2.0))+1))<<1); this.heap = new NodeI[this.size];
build(1, 0, array.length);
}
void build(int n, int from, int size) {
heap[n] = new NodeI(from, from + size - 1, size);
if (size == 1) {
this.initLeaf(n, array[from]);
} else {
build(n<<1, from, size >> 1);
build((n<<1)+1, from + (size >> 1), size - (size >> 1));
blnce(n);
}
}
protected NodeI blnce(int n) {
NodeI node = heap[n];
if (node.from == node.to) {
return node;
}
NodeI lft = heap[n << 1];
NodeI ryt = heap[(n<<1) + 1];
return balance(node, lft, ryt);
}
NodeI query(int n, int l, int r) {
if (l == heap[n].from && r == heap[n].to) {
return heap[n];
}
int rcFrom = heap[n].from + (heap[n].len >> 1);
if (r < rcFrom) {
return query(n << 1, l, r);
}
if (l >= rcFrom) {
return query((n << 1) + 1, l, r);
}
NodeI ln = query(n << 1, l, rcFrom - 1);
NodeI rn = query( (n << 1) + 1, rcFrom, r);
NodeI copyNode = new NodeI();
return balance(copyNode, ln, rn);
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICBwcml2YXRlIGludFtdIGFycmF5OwogICAgcHJpdmF0ZSBOb2RlSVtdIGhlYXA7CiAgICBpbnQgc2l6ZTsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgIE15U2Nhbm5lciBzYyA9IG5ldyBNeVNjYW5uZXIoKTsKICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKFN5c3RlbS5vdXQpLCB0cnVlKTsKCiAgICAgICAgaW50IGkgPSAwLCBOLCBRLCBsLCByOwogICAgICAgIGxvbmcgYW5zd2VyOwogICAgICAgIE4gPSBzYy5uZXh0SW50KCk7CiAgICAgICAgaW50W10gYXJyYXkgPSBuZXcgaW50W05dOwogICAgICAgIHdoaWxlIChpIDwgTikgewogICAgICAgICAgICBhcnJheVtpKytdID0gc2MubmV4dEludCgpOwogICAgICAgIH0KICAgICAgICBNYWluIGdzczEgPSBuZXcgTWFpbihhcnJheSk7CiAgICAgICAgUSA9IHNjLm5leHRJbnQoKTsKICAgICAgICBpID0gMDsKICAgICAgICB3aGlsZSAoaSsrIDwgUSkgewogICAgICAgICAgICBsID0gc2MubmV4dEludCgpOwogICAgICAgICAgICByID0gc2MubmV4dEludCgpOwogICAgICAgICAgICBhbnN3ZXIgPSBnc3MxLnF1ZXJ5KDEsIGwgLSAxLCByIC0gMSkuZ2V0TVMoKTsKICAgICAgICAgICAgb3V0LnByaW50bG4oYW5zd2VyICsgIlxuIik7CiAgICAgICAgfQoKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgUHJpbnRXcml0ZXIgb3V0OwogICAgcHVibGljIHN0YXRpYyBjbGFzcyBNeVNjYW5uZXIgewogICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyOwogICAgICAgIFN0cmluZ1Rva2VuaXplciBzdDsKCiAgICAgICAgcHVibGljIE15U2Nhbm5lcigpIHsKICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwogICAgICAgIH0KCiAgICAgICAgU3RyaW5nIG5leHQoKSB7CiAgICAgICAgICAgIHdoaWxlIChzdCA9PSBudWxsIHx8ICFzdC5oYXNNb3JlRWxlbWVudHMoKSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnIucmVhZExpbmUoKSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gc3QubmV4dFRva2VuKCk7CiAgICAgICAgfQoKICAgICAgICBpbnQgbmV4dEludCgpIHsgcmV0dXJuIEludGVnZXIucGFyc2VJbnQobmV4dCgpKTsgfQogICAgfQoKICAgIGNsYXNzIE5vZGVJIHsKICAgICAgICBpbnQgZnJvbSwgdG8sIGxlbjsKICAgICAgICBsb25nIHByZSwgc3VmLCBzdW0sIG1TOwoKICAgICAgICBwdWJsaWMgTm9kZUkoKSB7CiAgICAgICAgfQoKICAgICAgICBOb2RlSShpbnQgZnJvbSwgaW50IHRvLCBpbnQgbGVuKSB7CiAgICAgICAgICAgIHRoaXMuZnJvbSA9IGZyb207CiAgICAgICAgICAgIHRoaXMudG8gPSB0bzsKICAgICAgICAgICAgdGhpcy5sZW4gPSBsZW47CiAgICAgICAgfQoKICAgICAgICBOb2RlSShOb2RlSSBub2RlKSB7CiAgICAgICAgICAgIHRoaXMuZnJvbSA9IG5vZGUuZnJvbTsKICAgICAgICAgICAgdGhpcy50byA9IG5vZGUudG87CiAgICAgICAgICAgIHRoaXMubGVuID0gbm9kZS5sZW47CiAgICAgICAgICAgIHRoaXMucHJlID0gbm9kZS5wcmU7CiAgICAgICAgICAgIHRoaXMuc3VmID0gbm9kZS5zdWY7CiAgICAgICAgICAgIHRoaXMuc3VtID0gbm9kZS5zdW07CiAgICAgICAgICAgIHRoaXMubVMgPSBub2RlLm1TOwogICAgICAgIH0KCiAgICAgICAgbG9uZyBnZXRNUygpIHsgcmV0dXJuIG1TOyB9CgogICAgICAgIHZvaWQgc2V0TVMobG9uZyBtUykgeyB0aGlzLm1TID0gbVM7IH0KCiAgICAgICAgbG9uZyBnZXRTdW0oKSB7CiAgICAgICAgICAgIHJldHVybiBzdW07CiAgICAgICAgfQoKICAgICAgICB2b2lkIHNldFN1bShsb25nIHN1bSkgewogICAgICAgICAgICB0aGlzLnN1bSA9IHN1bTsKICAgICAgICB9CgogICAgICAgIGxvbmcgZ2V0U3VmKCkgewogICAgICAgICAgICByZXR1cm4gc3VmOwogICAgICAgIH0KCiAgICAgICAgdm9pZCBzZXRTdWYobG9uZyBzdWYpIHsKICAgICAgICAgICAgdGhpcy5zdWYgPSBzdWY7CiAgICAgICAgfQoKICAgICAgICB2b2lkIHNldFByZShsb25nIHByZSkgewogICAgICAgICAgICB0aGlzLnByZSA9IHByZTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBpbml0TGVhZihpbnQgbiwgSW50ZWdlciBpbnRlZ2VyKSB7CiAgICAgICAgTm9kZUkgbm9kZSA9IGhlYXBbbl07CiAgICAgICAgaW50IGluZGV4ID0gbm9kZS5mcm9tOwogICAgICAgIGludCB2YWx1ZSA9IGFycmF5W2luZGV4XTsKICAgICAgICBub2RlLnNldFByZSh2YWx1ZSk7CiAgICAgICAgbm9kZS5zZXRTdWYodmFsdWUpOwogICAgICAgIG5vZGUuc2V0U3VtKHZhbHVlKTsKICAgICAgICBub2RlLnNldE1TKHZhbHVlKTsKICAgIH0KICAgIE5vZGVJIGJhbGFuY2UoTm9kZUkgbm9kZSwgTm9kZUkgbGZ0LCBOb2RlSSByeXQpIHsKICAgICAgICBub2RlLnNldFByZShNYXRoLm1heChsZnQucHJlLCBsZnQuZ2V0U3VtKCkgKyByeXQucHJlKSk7CiAgICAgICAgbm9kZS5zZXRTdWYoTWF0aC5tYXgocnl0LmdldFN1ZigpLCByeXQuZ2V0U3VtKCkgKyBsZnQuZ2V0U3VmKCkpKTsKICAgICAgICBub2RlLnNldE1TKE1hdGgubWF4KE1hdGgubWF4KGxmdC5nZXRNUygpLCByeXQuZ2V0TVMoKSksIGxmdC5nZXRTdWYoKSArIHJ5dC5wcmUpKTsKICAgICAgICBub2RlLnNldFN1bShsZnQuZ2V0U3VtKCkgKyByeXQuZ2V0U3VtKCkpOwogICAgICAgIHJldHVybiBub2RlOwogICAgfQogICAgTWFpbihpbnRbXSBhcnJheSkgewogICAgICAgIHRoaXMuYXJyYXkgPSBBcnJheXMuY29weU9mKGFycmF5LCBhcnJheS5sZW5ndGgpOwogICAgICAgIHRoaXMuc2l6ZSA9ICgoaW50KU1hdGgucG93KDIuMCxNYXRoLmZsb29yKChNYXRoLmxvZygoZG91YmxlKWFycmF5Lmxlbmd0aCkvTWF0aC5sb2coMi4wKSkrMSkpPDwxKTsKICAgICAgICB0aGlzLmhlYXAgPSBuZXcgTm9kZUlbdGhpcy5zaXplXTsKICAgICAgICBidWlsZCgxLCAwLCBhcnJheS5sZW5ndGgpOwogICAgfQogICAgdm9pZCBidWlsZChpbnQgbiwgaW50IGZyb20sIGludCBzaXplKSB7CiAgICAgICAgaGVhcFtuXSA9IG5ldyBOb2RlSShmcm9tLCBmcm9tICsgc2l6ZSAtIDEsIHNpemUpOwogICAgICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgICAgdGhpcy5pbml0TGVhZihuLCBhcnJheVtmcm9tXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnVpbGQobjw8MSwgZnJvbSwgc2l6ZSA+PiAxKTsKICAgICAgICAgICAgYnVpbGQoKG48PDEpKzEsIGZyb20gKyAoc2l6ZSA+PiAxKSwgc2l6ZSAtIChzaXplID4+IDEpKTsKICAgICAgICAgICAgYmxuY2Uobik7CiAgICAgICAgfQogICAgfQogICAgcHJvdGVjdGVkIE5vZGVJIGJsbmNlKGludCBuKSB7CiAgICAgICAgTm9kZUkgbm9kZSA9IGhlYXBbbl07CiAgICAgICAgaWYgKG5vZGUuZnJvbSA9PSBub2RlLnRvKSB7CiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0KICAgICAgICBOb2RlSSBsZnQgPSBoZWFwW24gPDwgMV07CiAgICAgICAgTm9kZUkgcnl0ID0gaGVhcFsobjw8MSkgKyAxXTsKICAgICAgICByZXR1cm4gYmFsYW5jZShub2RlLCBsZnQsIHJ5dCk7CiAgICB9CiAgICBOb2RlSSBxdWVyeShpbnQgbiwgaW50IGwsIGludCByKSB7CiAgICAgICAgaWYgKGwgPT0gaGVhcFtuXS5mcm9tICYmIHIgPT0gaGVhcFtuXS50bykgewogICAgICAgICAgICByZXR1cm4gaGVhcFtuXTsKICAgICAgICB9CiAgICAgICAgaW50IHJjRnJvbSA9IGhlYXBbbl0uZnJvbSArIChoZWFwW25dLmxlbiA+PiAxKTsKICAgICAgICBpZiAociA8IHJjRnJvbSkgewogICAgICAgICAgICByZXR1cm4gcXVlcnkobiA8PCAxLCBsLCByKTsKICAgICAgICB9CiAgICAgICAgaWYgKGwgPj0gcmNGcm9tKSB7CiAgICAgICAgICAgIHJldHVybiBxdWVyeSgobiA8PCAxKSArIDEsIGwsIHIpOwogICAgICAgIH0KICAgICAgICBOb2RlSSBsbiA9IHF1ZXJ5KG4gPDwgMSwgbCwgcmNGcm9tIC0gMSk7CiAgICAgICAgTm9kZUkgcm4gPSBxdWVyeSggKG4gPDwgMSkgKyAxLCByY0Zyb20sIHIpOwogICAgICAgIE5vZGVJIGNvcHlOb2RlID0gbmV3IE5vZGVJKCk7CiAgICAgICAgcmV0dXJuIGJhbGFuY2UoY29weU5vZGUsIGxuLCBybik7CiAgICB9Cn0KCgo=