完全二叉树,每层开始节点的编号和结束结点的编号是固定的
代码可读性不是很好,大家见谅,代码中奇奇怪怪的加一减一都是因为数组下标从0开始的
n = int(input())
A = list(map(int, input().split()))
s = [0] * n
s[0] = A[0]
for i in range(1, n):
s[i] = s[i - 1] + A[i]#维护前缀和
mx = float('-inf') #记录本层权值和
deep = -1
for i in range(1, 10000):#这个i表示的是当前深度,这是range最大是10000是我随便写的,见谅
st = 2 ** i - 1 #计算开始结点编号
ed = min(2 ** (i + 1) - 1 - 1, n - 1) #结束结点编号,为什么和n - 1取min是因为这不是满二叉树,所以最后一层可能不全哦
tmp = s[ed] - s[st - 1]
if tmp > mx: mx = tmp; deep = i
if ed == n - 1: break
if A[0] > mx: deep = 0
print(deep + 1) #加1的原因是根节点算第一层