package com.interview.books.topcoder.array; import com.interview.basics.search.SegmentTree; /** * Created_By: stefanie * Date: 15-1-19 * Time: 下午3:56 * * Range Minimum Query is a very useful algorithm. * * Problem: * Given an array A[0, N-1] find the position of the element with the minimum value between two given indices. */ public class TCT_A1_RangeMinimumQuery { SegmentTree.Operator<Integer> operator = new SegmentTree.Operator<Integer>() { @Override public Integer operate(Integer a, Integer b) { return Math.min(a, b); } @Override public Integer init(int idx, Integer[] input) { return input[idx]; } }; SegmentTree<Integer> tree; public TCT_A1_RangeMinimumQuery(Integer[] array){ tree = new SegmentTree(array, operator); } public Integer getMin(int low, int high){ return tree.query(low, high); } public static void main(String[] args){ Integer[] array = new Integer[]{2,4,3,2,3,5,1,2,5}; TCT_A1_RangeMinimumQuery query = new TCT_A1_RangeMinimumQuery(array); System.out.println(query.getMin(1,5)); //2 System.out.println(query.getMin(1,6)); //1 System.out.println(query.getMin(4,5)); //3 } }