@@ -934,10 +934,10 @@ private static <D extends SegmentTree.Data> String getString(Segment<D> segment,
934
934
children .add (c );
935
935
}
936
936
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 ));
938
938
}
939
939
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 ));
941
941
}
942
942
943
943
return builder .toString ();
@@ -1069,9 +1069,7 @@ protected static <D extends Data> Segment<D> createFromList(int minLength,
1069
1069
if (segment .data == null )
1070
1070
segment .data = ((D ) s .data .copy ());
1071
1071
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
1075
1073
}
1076
1074
1077
1075
// 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,
1089
1087
s2 .add (s );
1090
1088
} else {
1091
1089
// 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 );
1094
1091
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 );
1097
1093
s2 .add (ss2 );
1098
1094
}
1099
1095
}
@@ -1279,6 +1275,9 @@ public D query(long startOfQuery, long endOfQuery) {
1279
1275
e = root .end ;
1280
1276
1281
1277
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 ;
1282
1281
return result ;
1283
1282
}
1284
1283
@@ -1306,8 +1305,9 @@ public OverlappingSegment(int minLength, long start, long end, D data) {
1306
1305
}
1307
1306
1308
1307
@ 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
+ {
1311
1311
OverlappingSegment <D > segment = new OverlappingSegment <D >(minLength );
1312
1312
segment .start = start ;
1313
1313
segment .end = start + (length - 1 );
@@ -1325,16 +1325,12 @@ protected static <D extends Data> Segment<D> createFromList(int minLength,
1325
1325
if (segment .data == null )
1326
1326
segment .data = ((D ) s .data .copy ());
1327
1327
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
1331
1329
} else if (!segment .hasChildren () && s .start >= segment .start && s .end <= segment .end ) {
1332
1330
if (segment .data == null )
1333
1331
segment .data = ((D ) s .data .copy ());
1334
1332
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
1338
1334
}
1339
1335
}
1340
1336
@@ -1353,16 +1349,14 @@ protected static <D extends Data> Segment<D> createFromList(int minLength,
1353
1349
s2 .add (s );
1354
1350
} else {
1355
1351
// 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 );
1358
1353
s1 .add (ss1 );
1359
1354
OverlappingSegment <D > ss2 = new OverlappingSegment <D >(minLength , middle , s .end , s .data );
1360
1355
s2 .add (ss2 );
1361
1356
}
1362
1357
}
1363
1358
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 );
1366
1360
segment .segments = new Segment [] { sub1 , sub2 };
1367
1361
}
1368
1362
0 commit comments