Rekursiver Aufbau eines balancierten Baums aus Präfixsummen
C++
Hard
recursion
Aufgabe «Rekursiver Aufbau eines balancierten Baums aus Präfixsummen»
Gegeben ist ein Array A aus ganzen Zahlen der Größe N. Es soll rekursiv ein binärer Baum aufgebaut werden, bei dem jeder Knoten die Präfixsumme der Elemente im Intervall [l, r) sowie die Indizes l und r enthält. Die Wurzel entspricht dem Intervall [0, N). Teilen Sie das Intervall rekursiv in zwei Hälften (linke Hälfte [l, mid), rechte Hälfte [mid, r)), bis die Länge des Intervalls 1 beträgt. Berechnen Sie für jeden Knoten die Summe der Elemente in seinem Intervall. Geben Sie den Baum in der Tiefensuche-Reihenfolge (pre-order) aus: Geben Sie für jeden Knoten l, r und die Summe aus. Verwenden Sie Rekursion. N <= 100, die Zahlen im Array haben einen Betrag <= 10^6.
Eingabeformat
Erste Zeile: Ganzzahl N (1 <= N <= 100). Zweite Zeile: N ganze Zahlen A[i] (-10^6 <= A[i] <= 10^6).
Ausgabeformat
Geben Sie für jeden Knoten in pre-order-Reihenfolge drei Zahlen aus: l, r, sum. Jeder Knoten in einer eigenen Zeile. Wenn das Intervall leer ist (l == r), geben Sie nichts aus.
Beispiele
Beispiel 1
EINGABE
4
1 2 3 4
AUSGABE
0 4 10
0 2 3
0 1 1
1 2 2
2 4 7
2 3 3
3 4 4
Beispiel 2
EINGABE
2
-5 5
AUSGABE
0 2 0
0 1 -5
1 2 5
main.cpp