@@ -934,10 +934,10 @@ private static <D extends SegmentTree.Data> String getString(Segment<D> segment,
934934 children .add (c );
935935 }
936936 for (int i = 0 ; i < children .size () - 1 ; i ++) {
937- builder .append (getString (children .get (i ), prefix + (isTail ? " " : "│ " ), false ));
937+ builder .append (getString (children .get (i ), prefix + (isTail ? " " : "│ " ), false ));
938938 }
939939 if (children .size () > 1 ) {
940- builder .append (getString (children .get (children .size () - 1 ), prefix + (isTail ? " " : "│ " ), true ));
940+ builder .append (getString (children .get (children .size () - 1 ), prefix + (isTail ? " " : "│ " ), true ));
941941 }
942942
943943 return builder .toString ();
@@ -1069,9 +1069,7 @@ protected static <D extends Data> Segment<D> createFromList(int minLength,
10691069 if (segment .data == null )
10701070 segment .data = ((D ) s .data .copy ());
10711071 else
1072- segment .data .combined (s .data ); // Update our data to
1073- // reflect all
1074- // children's data
1072+ segment .data .combined (s .data ); // Update our data to reflect all children's data
10751073 }
10761074
10771075 // If segment is greater or equal to two, split data into
@@ -1089,11 +1087,9 @@ protected static <D extends Data> Segment<D> createFromList(int minLength,
10891087 s2 .add (s );
10901088 } else {
10911089 // Need to split across middle
1092- NonOverlappingSegment <D > ss1 = new NonOverlappingSegment <D >(minLength , s .start , middle - 1 ,
1093- s .data );
1090+ NonOverlappingSegment <D > ss1 = new NonOverlappingSegment <D >(minLength , s .start , middle - 1 , s .data );
10941091 s1 .add (ss1 );
1095- NonOverlappingSegment <D > ss2 = new NonOverlappingSegment <D >(minLength , middle , s .end ,
1096- s .data );
1092+ NonOverlappingSegment <D > ss2 = new NonOverlappingSegment <D >(minLength , middle , s .end , s .data );
10971093 s2 .add (ss2 );
10981094 }
10991095 }
@@ -1279,6 +1275,9 @@ public D query(long startOfQuery, long endOfQuery) {
12791275 e = root .end ;
12801276
12811277 D result = root .query (s , e );
1278+ // reset the start and end, it can change in query
1279+ result .start = startOfQuery ;
1280+ result .end = endOfQuery ;
12821281 return result ;
12831282 }
12841283
@@ -1306,8 +1305,9 @@ public OverlappingSegment(int minLength, long start, long end, D data) {
13061305 }
13071306
13081307 @ SuppressWarnings ("unchecked" )
1309- protected static <D extends Data > Segment <D > createFromList (int minLength ,
1310- List <OverlappingSegment <D >> segments , long start , int length ) {
1308+ protected static <D extends Data > Segment <D > createFromList (int minLength , List <OverlappingSegment <D >> segments ,
1309+ long start , int length )
1310+ {
13111311 OverlappingSegment <D > segment = new OverlappingSegment <D >(minLength );
13121312 segment .start = start ;
13131313 segment .end = start + (length - 1 );
@@ -1325,16 +1325,12 @@ protected static <D extends Data> Segment<D> createFromList(int minLength,
13251325 if (segment .data == null )
13261326 segment .data = ((D ) s .data .copy ());
13271327 else
1328- segment .data .combined (s .data ); // Update our data
1329- // to reflect all
1330- // children's data
1328+ segment .data .combined (s .data ); // Update our data to reflect all children's data
13311329 } else if (!segment .hasChildren () && s .start >= segment .start && s .end <= segment .end ) {
13321330 if (segment .data == null )
13331331 segment .data = ((D ) s .data .copy ());
13341332 else
1335- segment .data .combined (s .data ); // Update our data
1336- // to reflect all
1337- // children's data
1333+ segment .data .combined (s .data ); // Update our data to reflect all children's data
13381334 }
13391335 }
13401336
@@ -1353,16 +1349,14 @@ protected static <D extends Data> Segment<D> createFromList(int minLength,
13531349 s2 .add (s );
13541350 } else {
13551351 // Need to split across middle
1356- OverlappingSegment <D > ss1 = new OverlappingSegment <D >(minLength , s .start , middle - 1 ,
1357- s .data );
1352+ OverlappingSegment <D > ss1 = new OverlappingSegment <D >(minLength , s .start , middle - 1 , s .data );
13581353 s1 .add (ss1 );
13591354 OverlappingSegment <D > ss2 = new OverlappingSegment <D >(minLength , middle , s .end , s .data );
13601355 s2 .add (ss2 );
13611356 }
13621357 }
13631358 Segment <D > sub1 = createFromList (minLength , s1 , segment .start , segment .half );
1364- Segment <D > sub2 = createFromList (minLength , s2 , segment .start + segment .half , segment .length
1365- - segment .half );
1359+ Segment <D > sub2 = createFromList (minLength , s2 , segment .start + segment .half , segment .length - segment .half );
13661360 segment .segments = new Segment [] { sub1 , sub2 };
13671361 }
13681362
0 commit comments