Skip to content

Commit 7cc1883

Browse files
authored
Merge pull request NASU41#36 from suisen-cp/maxflow
SegTree, LazySegTree: toString
2 parents 951e334 + e7d9874 commit 7cc1883

2 files changed

Lines changed: 58 additions & 12 deletions

File tree

‎LazySegTree/LazySegTree.java‎

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,17 +247,36 @@ public void setIndent(int newIndent) {
247247

248248
@Override
249249
public String toString() {
250-
return toString(1, 0);
250+
return toSimpleString();
251251
}
252252

253-
private String toString(int k, int sp) {
254-
if (k >= N) return indent(sp) + Dat[k];
253+
private S[] simulatePushAll() {
254+
S[] simDat = java.util.Arrays.copyOf(Dat, 2 * N);
255+
F[] simLaz = java.util.Arrays.copyOf(Laz, 2 * N);
256+
for (int k = 1; k < N; k++) {
257+
if (simLaz[k] == Id) continue;
258+
int lk = k << 1 | 0, rk = k << 1 | 1;
259+
simDat[lk] = Mapping.apply(simLaz[k], simDat[lk]);
260+
simDat[rk] = Mapping.apply(simLaz[k], simDat[rk]);
261+
if (lk < N) simLaz[lk] = Composition.apply(simLaz[k], simLaz[lk]);
262+
if (rk < N) simLaz[rk] = Composition.apply(simLaz[k], simLaz[rk]);
263+
simLaz[k] = Id;
264+
}
265+
return simDat;
266+
}
267+
268+
public String toDetailedString() {
269+
return toDetailedString(1, 0, simulatePushAll());
270+
}
271+
272+
private String toDetailedString(int k, int sp, S[] dat) {
273+
if (k >= N) return indent(sp) + dat[k];
255274
String s = "";
256-
s += toString(k << 1 | 1, sp + indent);
275+
s += toDetailedString(k << 1 | 1, sp + indent, dat);
257276
s += "\n";
258-
s += indent(sp) + Dat[k] + "/" + Laz[k];
277+
s += indent(sp) + dat[k];
259278
s += "\n";
260-
s += toString(k << 1 | 0, sp + indent);
279+
s += toDetailedString(k << 1 | 0, sp + indent, dat);
261280
return s;
262281
}
263282

@@ -266,4 +285,16 @@ private static String indent(int n) {
266285
while (n --> 0) sb.append(' ');
267286
return sb.toString();
268287
}
288+
289+
public String toSimpleString() {
290+
S[] dat = simulatePushAll();
291+
StringBuilder sb = new StringBuilder();
292+
sb.append('[');
293+
for (int i = 0; i < N; i++) {
294+
sb.append(dat[i + N]);
295+
if (i < N - 1) sb.append(',').append(' ');
296+
}
297+
sb.append(']');
298+
return sb.toString();
299+
}
269300
}

‎SegTree/SegTree.java‎

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,21 @@ public void setIndent(int newIndent) {
151151

152152
@Override
153153
public String toString() {
154-
return toString(1, 0);
154+
return toSimpleString();
155155
}
156156

157-
private String toString(int k, int sp) {
158-
if (k >= N) return indent(sp) + Dat[k];
157+
public String toDetailedString() {
158+
return toDetailedString(1, 0);
159+
}
160+
161+
private String toDetailedString(int k, int sp) {
162+
if (k >= N) return indent(sp) + data[k];
159163
String s = "";
160-
s += toString(k << 1 | 1, sp + indent);
164+
s += toDetailedString(k << 1 | 1, sp + indent);
161165
s += "\n";
162-
s += indent(sp) + Dat[k];
166+
s += indent(sp) + data[k];
163167
s += "\n";
164-
s += toString(k << 1 | 0, sp + indent);
168+
s += toDetailedString(k << 1 | 0, sp + indent);
165169
return s;
166170
}
167171

@@ -170,4 +174,15 @@ private static String indent(int n) {
170174
while (n --> 0) sb.append(' ');
171175
return sb.toString();
172176
}
177+
178+
public String toSimpleString() {
179+
StringBuilder sb = new StringBuilder();
180+
sb.append('[');
181+
for (int i = 0; i < N; i++) {
182+
sb.append(data[i + N]);
183+
if (i < N - 1) sb.append(',').append(' ');
184+
}
185+
sb.append(']');
186+
return sb.toString();
187+
}
173188
}

0 commit comments

Comments
 (0)