import java.io.DataInputStream;
import java.io.InputStream;
class segTreeNode{
int preMaxSum;
int sufMaxSum;
int maxSum;
int sum;
public void addtoleaf(int value)
{
preMaxSum = value;
sufMaxSum = value;
maxSum = value;
sum = value;
}
public void mergetree(segTreeNode left , segTreeNode right)
{
sum = left.sum+right.sum;
preMaxSum
= Math.
max(left.
preMaxSum, left.
sum+right.
preMaxSum); sufMaxSum
= Math.
max(right.
sufMaxSum,right.
sum+left.
sufMaxSum); maxSum
= Math.
max(preMaxSum,
Math.
max(sufMaxSum,
Math.
max(left.
maxSum,
Math.
max(right.
maxSum, left.
sufMaxSum+right.
preMaxSum)))); }
public int getValue()
{
return maxSum;
}
}
public class Main {
static segTreeNode[] nodes ;
//static int abc = 5;
public int getSize(int n)
{
int size = 1;
for(;size<n;size= size<<1);
return size<<1;
}
Main(int[]arr)
{
nodes = new segTreeNode[getSize(arr.length)];
build(arr,0,arr.length-1,1);
}
public static void build(int[] arr, int as, int ae, int index)
{
if(as == ae)
{
segTreeNode stc = new segTreeNode();
stc.addtoleaf(arr[as]);
nodes[index]= stc;
return;
}
int mid = as+(ae-as)/2;
int left = 2*index;
int right = left+1;
build(arr,as,mid,left);
build(arr,mid+1,ae,right);
nodes[index] = new segTreeNode();
nodes[index].mergetree(nodes[left], nodes[right]);
}
public static segTreeNode query(int index ,int qs, int qe, int as, int ae)
{
if(qs == as && qe == ae)
{
return nodes[index];
}
int mid = as+(ae-as)/2;
if(qs>mid)
return query(2*index+1, qs, qe, mid+1, ae);
if(qe<=mid)
return query(2*index,qs,qe,as,mid);
segTreeNode left = query(2*index, qs, mid, as, mid);
segTreeNode right = query(2*index+1,mid+1,qe,mid+1,ae);
segTreeNode res = new segTreeNode();
res.mergetree(left, right);
return res;
}
int no = p.nextInt();
int[]arr = new int[no];
for(int i = 0;i<no;i++)
arr[i] = p.nextInt();
Main m = new Main(arr);
int q = p.nextInt();
while(q>0)
{
q--;
segTreeNode st = Main.query(1, p.nextInt()-1, p.nextInt()-1, 0, no-1);
System.
out.
println(st.
maxSum); }
}
}
{din
=new DataInputStream(in
);buffer
=new byte[BUFFER_SIZE
];bufferPointer
=bytesRead
=0;} {long ret=0;byte c=read();while(c<=' ')c=read();boolean neg=c=='-';if(neg)c=read();do
{ret=ret*10+c-'0';c=read();}while(c>' ');if(neg)return-ret;return ret;}
{StringBuilder ret=new StringBuilder();byte c=read();while(c<=' ')c=read();do
{ret=ret.append((char)c);c=read();}while(c>' ');return ret.toString();}
{int ret=0;byte c=read();while(c<=' ')c=read();boolean neg=c=='-';if(neg)c=read();do
{ret=ret*10+c-'0';c=read();}while(c>' ');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++];}}
aW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKCmNsYXNzIHNlZ1RyZWVOb2RlewoJaW50IHByZU1heFN1bTsKCWludCBzdWZNYXhTdW07CglpbnQgbWF4U3VtOwoJaW50IHN1bTsKCXB1YmxpYyB2b2lkIGFkZHRvbGVhZihpbnQgdmFsdWUpCgl7CgkJcHJlTWF4U3VtID0gdmFsdWU7CgkJc3VmTWF4U3VtID0gdmFsdWU7CgkJbWF4U3VtID0gdmFsdWU7CgkJc3VtID0gdmFsdWU7Cgl9CglwdWJsaWMgdm9pZCBtZXJnZXRyZWUoc2VnVHJlZU5vZGUgbGVmdCAsIHNlZ1RyZWVOb2RlIHJpZ2h0KQoJewoJCQoJCXN1bSA9IGxlZnQuc3VtK3JpZ2h0LnN1bTsKCQlwcmVNYXhTdW0gPSBNYXRoLm1heChsZWZ0LnByZU1heFN1bSwgbGVmdC5zdW0rcmlnaHQucHJlTWF4U3VtKTsKCQlzdWZNYXhTdW0gPSBNYXRoLm1heChyaWdodC5zdWZNYXhTdW0scmlnaHQuc3VtK2xlZnQuc3VmTWF4U3VtKTsKCQltYXhTdW0gPSBNYXRoLm1heChwcmVNYXhTdW0sIE1hdGgubWF4KHN1Zk1heFN1bSwgTWF0aC5tYXgobGVmdC5tYXhTdW0sIE1hdGgubWF4KHJpZ2h0Lm1heFN1bSwgbGVmdC5zdWZNYXhTdW0rcmlnaHQucHJlTWF4U3VtKSkpKTsKCX0KCXB1YmxpYyBpbnQgZ2V0VmFsdWUoKQoJewoJCXJldHVybiBtYXhTdW07Cgl9Cn0KcHVibGljIGNsYXNzIE1haW4gewoJc3RhdGljIHNlZ1RyZWVOb2RlW10gIG5vZGVzIDsKCS8vc3RhdGljIGludCBhYmMgPSA1OwoJcHVibGljIGludCBnZXRTaXplKGludCBuKQoJewoJCWludCBzaXplID0gMTsKCQlmb3IoO3NpemU8bjtzaXplPSBzaXplPDwxKTsKCQlyZXR1cm4gc2l6ZTw8MTsKCX0KCU1haW4oaW50W11hcnIpCgl7CgkJbm9kZXMgPSBuZXcgc2VnVHJlZU5vZGVbZ2V0U2l6ZShhcnIubGVuZ3RoKV07CgkJYnVpbGQoYXJyLDAsYXJyLmxlbmd0aC0xLDEpOwoJfQoJcHVibGljIHN0YXRpYyB2b2lkIGJ1aWxkKGludFtdIGFyciwgaW50IGFzLCBpbnQgYWUsIGludCBpbmRleCkKCXsKCQlpZihhcyA9PSBhZSkKCQl7CgkJCXNlZ1RyZWVOb2RlIHN0YyA9IG5ldyBzZWdUcmVlTm9kZSgpOwoJCQlzdGMuYWRkdG9sZWFmKGFyclthc10pOwoJCQlub2Rlc1tpbmRleF09IHN0YzsKCQkJcmV0dXJuOwoJCX0KCQlpbnQgbWlkID0gYXMrKGFlLWFzKS8yOwoJCWludCBsZWZ0ID0gMippbmRleDsKCQlpbnQgcmlnaHQgPSBsZWZ0KzE7CgkJYnVpbGQoYXJyLGFzLG1pZCxsZWZ0KTsKCQlidWlsZChhcnIsbWlkKzEsYWUscmlnaHQpOwoJCW5vZGVzW2luZGV4XSA9IG5ldyBzZWdUcmVlTm9kZSgpOwoJCW5vZGVzW2luZGV4XS5tZXJnZXRyZWUobm9kZXNbbGVmdF0sIG5vZGVzW3JpZ2h0XSk7CgkJCgl9CglwdWJsaWMgc3RhdGljIHNlZ1RyZWVOb2RlIHF1ZXJ5KGludCBpbmRleCAsaW50IHFzLCBpbnQgcWUsIGludCBhcywgaW50IGFlKQoJewoJCWlmKHFzID09IGFzICYmIHFlID09IGFlKQoJCXsKCQkJcmV0dXJuIG5vZGVzW2luZGV4XTsKCQl9CgkJaW50IG1pZCA9IGFzKyhhZS1hcykvMjsKCQlpZihxcz5taWQpCgkJCXJldHVybiBxdWVyeSgyKmluZGV4KzEsIHFzLCBxZSwgbWlkKzEsIGFlKTsKCQlpZihxZTw9bWlkKQoJCQlyZXR1cm4gcXVlcnkoMippbmRleCxxcyxxZSxhcyxtaWQpOwoJCXNlZ1RyZWVOb2RlIGxlZnQgPSBxdWVyeSgyKmluZGV4LCBxcywgbWlkLCBhcywgbWlkKTsKCQlzZWdUcmVlTm9kZSByaWdodCA9IHF1ZXJ5KDIqaW5kZXgrMSxtaWQrMSxxZSxtaWQrMSxhZSk7CgkJc2VnVHJlZU5vZGUgcmVzID0gbmV3IHNlZ1RyZWVOb2RlKCk7CgkJcmVzLm1lcmdldHJlZShsZWZ0LCByaWdodCk7CgkJcmV0dXJuIHJlczsKCX0KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewoJCVBhcnNlciBwID0gbmV3IFBhcnNlcihTeXN0ZW0uaW4pOwoJCWludCBubyA9IHAubmV4dEludCgpOwoJCWludFtdYXJyID0gbmV3IGludFtub107CgkJZm9yKGludCBpID0gMDtpPG5vO2krKykKCQkJYXJyW2ldID0gcC5uZXh0SW50KCk7CgkJTWFpbiBtID0gbmV3IE1haW4oYXJyKTsKCQlpbnQgcSA9IHAubmV4dEludCgpOwoJCXdoaWxlKHE+MCkKCQl7CgkJCXEtLTsKCQlzZWdUcmVlTm9kZSAgc3QgPQlNYWluLnF1ZXJ5KDEsIHAubmV4dEludCgpLTEsIHAubmV4dEludCgpLTEsIDAsIG5vLTEpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihzdC5tYXhTdW0pOwoJCX0KCX0KfQpjbGFzcyBQYXJzZXIKe2ZpbmFsIHByaXZhdGUgaW50IEJVRkZFUl9TSVpFPTE8PDE2O3ByaXZhdGUgRGF0YUlucHV0U3RyZWFtIGRpbjtwcml2YXRlIGJ5dGVbXWJ1ZmZlcjtwcml2YXRlIGludCBidWZmZXJQb2ludGVyLGJ5dGVzUmVhZDtwdWJsaWMgUGFyc2VyKElucHV0U3RyZWFtIGluKQp7ZGluPW5ldyBEYXRhSW5wdXRTdHJlYW0oaW4pO2J1ZmZlcj1uZXcgYnl0ZVtCVUZGRVJfU0laRV07YnVmZmVyUG9pbnRlcj1ieXRlc1JlYWQ9MDt9CnB1YmxpYyBsb25nIG5leHRMb25nKCl0aHJvd3MgRXhjZXB0aW9uCntsb25nIHJldD0wO2J5dGUgYz1yZWFkKCk7d2hpbGUoYzw9JyAnKWM9cmVhZCgpO2Jvb2xlYW4gbmVnPWM9PSctJztpZihuZWcpYz1yZWFkKCk7ZG8Ke3JldD1yZXQqMTArYy0nMCc7Yz1yZWFkKCk7fXdoaWxlKGM+JyAnKTtpZihuZWcpcmV0dXJuLXJldDtyZXR1cm4gcmV0O30KcHVibGljIFN0cmluZyBuZXh0KCl0aHJvd3MgRXhjZXB0aW9uCntTdHJpbmdCdWlsZGVyIHJldD1uZXcgU3RyaW5nQnVpbGRlcigpO2J5dGUgYz1yZWFkKCk7d2hpbGUoYzw9JyAnKWM9cmVhZCgpO2RvCntyZXQ9cmV0LmFwcGVuZCgoY2hhciljKTtjPXJlYWQoKTt9d2hpbGUoYz4nICcpO3JldHVybiByZXQudG9TdHJpbmcoKTt9CnB1YmxpYyBpbnQgbmV4dEludCgpdGhyb3dzIEV4Y2VwdGlvbgp7aW50IHJldD0wO2J5dGUgYz1yZWFkKCk7d2hpbGUoYzw9JyAnKWM9cmVhZCgpO2Jvb2xlYW4gbmVnPWM9PSctJztpZihuZWcpYz1yZWFkKCk7ZG8Ke3JldD1yZXQqMTArYy0nMCc7Yz1yZWFkKCk7fXdoaWxlKGM+JyAnKTtpZihuZWcpcmV0dXJuLXJldDtyZXR1cm4gcmV0O30KcHJpdmF0ZSB2b2lkIGZpbGxCdWZmZXIoKXRocm93cyBFeGNlcHRpb24Ke2J5dGVzUmVhZD1kaW4ucmVhZChidWZmZXIsYnVmZmVyUG9pbnRlcj0wLEJVRkZFUl9TSVpFKTtpZihieXRlc1JlYWQ9PS0xKWJ1ZmZlclswXT0tMTt9CnByaXZhdGUgYnl0ZSByZWFkKCl0aHJvd3MgRXhjZXB0aW9uCntpZihidWZmZXJQb2ludGVyPT1ieXRlc1JlYWQpZmlsbEJ1ZmZlcigpO3JldHVybiBidWZmZXJbYnVmZmVyUG9pbnRlcisrXTt9fQo=