Skip to content

Instantly share code, notes, and snippets.

@pranavsuresh7
Created March 18, 2020 12:25
Show Gist options
  • Save pranavsuresh7/58b981ec8d17594362a4b4f29b48e557 to your computer and use it in GitHub Desktop.
Save pranavsuresh7/58b981ec8d17594362a4b4f29b48e557 to your computer and use it in GitHub Desktop.
Segment tree for finding maximum value between an interval in array
#include<bits/stdc++.h>
using namespace std;
void buildSegment(int *arr,int *arr_value,int node,int llimit,int hlimit){
if(llimit==hlimit){
arr_value[node-1]= arr[llimit];
return;
}else{
int mid = (llimit+hlimit)/2;
buildSegment(arr,arr_value,2*node,llimit,mid);
buildSegment(arr,arr_value,2*node+1,mid+1,hlimit);
arr_value[node-1] = max(arr_value[2*node-1],arr_value[2*node]);
return;
}
}
int query(int *arr_value,int node,int llimit,int hlimit,int start,int end){
if(start<=llimit && end>=hlimit) return arr_value[node-1];
else if(llimit>end || hlimit<start) return INT_MIN;
else{
int mid = (llimit+hlimit)/2;
int k1 = query(arr_value,node*2,llimit,mid,start,end);
int k2 = query(arr_value,2*node+1,mid+1,hlimit,start,end);
return max(k1,k2);
}
}
int main(){
int arr_value[100000];
int arr[] = {-1,2,-1,10,30,4};
int testCase = 1;
buildSegment(arr,arr_value,1,0,5);
while(testCase--){
int start,end;
cin >> start >> end;
cout << query(arr_value,1,0,5,start-1,end-1)<< endl;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment