递归构建前缀和平衡树

C++ Hard recursion

任务 «递归构建前缀和平衡树»

给定一个大小为 N 的整数数组 A。需要递归地构建一棵二叉树,其中每个节点包含区间 [l, r) 上元素的前缀和,以及索引 l 和 r。根节点对应区间 [0, N)。递归地将区间对半分割(左半部分 [l, mid),右半部分 [mid, r)),直到区间长度为 1。对于每个节点,计算其区间内元素的和。按深度优先遍历(前序)输出树:对于每个节点,输出 l、r 和和。使用递归。N <= 100,数组中的数绝对值 <= 10^6。

输入格式

第一行:整数 N(1 <= N <= 100)。第二行:N 个整数 A[i](-10^6 <= A[i] <= 10^6)。

输出格式

对于每个节点,按前序遍历顺序输出三个数字:l, r, sum。每个节点占一行。如果区间为空(l == r),则不输出任何内容。

示例

示例 1

输入
4 1 2 3 4
输出
0 4 10 0 2 3 0 1 1 1 2 2 2 4 7 2 3 3 3 4 4

示例 2

输入
2 -5 5
输出
0 2 0 0 1 -5 1 2 5
main.cpp