1
1
package org .psjava .algo .sequence .rmq ;
2
2
3
3
import java .util .Comparator ;
4
+ import java .util .List ;
5
+ import java .util .stream .Collectors ;
6
+ import java .util .stream .IntStream ;
4
7
5
8
import org .psjava .ds .array .PSArray ;
6
- import org .psjava .ds .array .MutableArray ;
7
- import org .psjava .ds .array .MutableArrayFactory ;
8
9
import org .psjava .ds .tree .segmenttree .SegmentTree ;
9
10
import org .psjava .ds .tree .segmenttree .SegmentTreeByArrayImplementation ;
10
11
import org .psjava .util .Assertion ;
11
- import org .psjava .util .ZeroTo ;
12
12
13
13
/**
14
14
* Time complexity for preprocessing: Time complexity for constructing segment tree. known best is, O(n)
@@ -22,10 +22,9 @@ public class RangeMinimumQueryUsingSegmentTree {
22
22
public static final RangeMinimumQuery INSTANCE = new RangeMinimumQuery () {
23
23
@ Override
24
24
public <T > RangeMinimumQuerySession preprocess (final PSArray <T > a , final Comparator <T > comp ) {
25
- MutableArray <Integer > indexes = MutableArrayFactory .create (a .size (), 0 );
26
- for (int i : ZeroTo .get (a .size ()))
27
- indexes .set (i , i );
28
- final SegmentTree <Integer > tree = new SegmentTreeByArrayImplementation <>(indexes , (i1 , i2 ) -> RangeMinimumQueryUtil .selectSmallestIndex (a , i1 , i2 , comp ));
25
+ List <Integer > init = IntStream .range (0 , a .size ())
26
+ .boxed ().collect (Collectors .toList ());
27
+ final SegmentTree <Integer > tree = new SegmentTreeByArrayImplementation <>(init , (i1 , i2 ) -> RangeMinimumQueryUtil .selectSmallestIndex (a , i1 , i2 , comp ));
29
28
return (start , end ) -> {
30
29
Assertion .ensure (start < end );
31
30
return tree .query (start , end );
0 commit comments