diff --git a/data-structures/SegmentTree.java b/data-structures/SegmentTree.java new file mode 100644 index 0000000..0fb2f83 --- /dev/null +++ b/data-structures/SegmentTree.java @@ -0,0 +1,101 @@ +import java.util.*; +import java.lang.*; +import java.io.*; +class SegmentTree +{ + int st[]; + Segment(int []arr, int n) + { + int x = (int) Math.ceil((Math.log(n)/Math.log(2))); + int max_size = 2 *(int) (Math.pow(2,x) - 1); + st = new int[max_size]; + + constSegmentUtil(arr,0,n-1,0); + } + + int constSegmentUtil(int []arr, int ss,int se,int si) + { + if(ss == se) + { + st[si] = arr[ss]; + return arr[ss]; + } + int mid = getMid(ss,se); + st[si] = max(constSegmentUtil(arr,ss,mid,2*si+1),constSegmentUtil(arr,mid+1,se,2*si+2)); + return st[si]; + } + + int getMid(int s,int e) + { + return s + (e - s)/2; + } + + int max(int a,int b) + { + if(a > b) + { + return a; + } + else{ + return b; + } + } + + void print(){ + for (int i=0;i=se) + { + return st[si]; + } + + if(seqe) + { + return 0; + } + + int mid = getMid(ss,se); + + return max(getMaxUtil(ss,mid,qs,qe,2*si+1),getMaxUtil(mid+1,se,qs,qe,2*si+2)); + } + + + int getMax(int n,int qs,int qe){ + + if(qs > qe || qs < 0 || qe > n-1){ + return -1; + } + + return getMaxUtil(0,n-1,qs,qe,0); + } + + public static void main (String[] args) throws java.lang.Exception + { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int t = Integer.parseInt(br.readLine());//for testcase + String []temp = br.readLine().split(" ");//taking array as string + int []arr = new int[t]; + for(int i=0;i