package com.interview.books.ninechapter; import com.interview.basics.search.SegmentTree; /** * Created_By: stefanie * Date: 15-1-19 * Time: 下午8:07 */ public class NC8_SubarrayGCD_SegmentTree { SegmentTree.Operator<Integer> operator = new SegmentTree.Operator<Integer>() { @Override public Integer operate(Integer i, Integer j) { if (j > i) return operate(j, i); while (i % j != 0) { int mod = i % j; i = j; j = mod; } return j; } @Override public Integer init(int idx, Integer[] input) { return input[idx]; } }; SegmentTree<Integer> tree; public NC8_SubarrayGCD_SegmentTree(Integer[] A) { tree = new SegmentTree(A, operator); } public Integer gcd(int low, int high){ return tree.query(low, high); } public static void main(String[] args){ Integer[] array = new Integer[]{2,6,12,24,18,78}; NC8_SubarrayGCD_SegmentTree gcder = new NC8_SubarrayGCD_SegmentTree(array); System.out.println(gcder.gcd(0, 5)); //2 System.out.println(gcder.gcd(2, 3)); //12 System.out.println(gcder.gcd(1, 4)); //6 } }