my code is showing wrong answer…please help me out…
#include
using namespace std;
#include <math.h>
#include <limits.h>
#include <stdio.h>
#include <bits/stdc++.h>
//long long maximum;
long long a[500001];
long long find_query(long long u,long long v,long long l,long long hi,long long st[],long long i)
{
if(hi<u || l>v)
{
return LLONG_MIN;
}
else if(l>=u && hi<=v)
return st[i];
long long mid=(l+hi)/2;
//cout<<mid<<endl;
long long x=find_query(u,v,l,mid,st,2*i+1);
long long y=find_query(u,v,mid+1,hi,st,2*i+2);
return(max(max(x,y),x+y));
}
long long segment_tree(long long a[],long long st[],long long l,long long h,long long p)
{
if(l==h)
{
st[p]=a[l];
return st[p];
}
long long mid=(l+h)/2;
long long x=segment_tree(a,st,l,mid,(2*p)+1);
long long y= segment_tree(a,st,mid+1,h,(2*p)+2);
long long maxm=LLONG_MIN;
if(x>maxm)
maxm=x;
if(y>maxm)
maxm=y;
if(x+y>maxm)
maxm=x+y;
st[p]=maxm;
return st[p];
//return;
}
int main() {
long long n;
scanf("%lld",&n);
// cin>>n;
for(long long i=0;i<n;i++)
scanf("%lld",&a[i]);
long long x = (long long)(ceil(log2(n)));
long long max_size = 2*(long long)pow(2, x) - 1;
long long st[max_size];
segment_tree(a,st,0,n-1,0);
// for(long long i=0;i<max_size;i++)
// cout<<st[i]<<" ";
// cout<<endl;
long long m;
scanf("%lld",&m);
for(long long i=0;i<m;i++)
{
long long u,v;
scanf("%lld%lld",&u,&v);
u=u-1;
v=v-1;
long long ans=find_query(u,v,0,n-1,st,0);
printf("%lld",ans);
printf("\n");
}
return 0;
}