#include <bits/stdc++.h>
using namespace std;
/*Structure that is used to
store value*/
struct node
{
int sum,prefixsum;
int suffixsum,maxsum;
};
node tree[4*50010];
int arr[50010];
/*This function is used to build the
segment tree*/
void build(int index,int start,int end)
{
if(start == end)
{
tree[index].sum = arr[start];
tree[index].prefixsum = arr[start];
tree[index].suffixsum = arr[start];
tree[index].maxsum = arr[start];
}
else
{
int mid = (start+end)/2;
build(2*index+1,start,mid);
build(2*index+2,mid+1,end);
https://codingninjas.in/app/classroom/me/163/content/2650/offering/11441/problem/1892 1/3
26/07/2019 Coding Ninjas
);
}
}
/*this function is used to return the result
for each query*/
node query(int index,int start,int end,int l,int r)
{
node result;
result.sum=result.prefixsum=INT_MIN;
result.suffixsum=result.maxsum=INT_MIN;
if(r<start || end<l)
return result;
if(l<=start && end<=r)
return tree[index];
for(int i=0;i<n;++i)
scanf("%d",&arr[i]);
build(0,0,n-1);
scanf("%d",&m);
https://codingninjas.in/app/classroom/me/163/content/2650/offering/11441/problem/1892 2/3
26/07/2019 Coding Ninjas
for(int i=0;i<m;++i)
{
scanf("%d%d",&a,&b);
printf("%d\n",query(0,0,n-1,a-1,b-1).maxsum);
}
return 0;
}
https://codingninjas.in/app/classroom/me/163/content/2650/offering/11441/problem/1892 3/3