为什么为什么为什么呢
#include<iostream>
#include<cmath>
using namespace std;
int tre[130005]; //树的每个结点
long long sums = 0; //当前深度的权值和
int main()
{
int N; //总的结点个数
int base = 0; //上一深度的结点个数
int height = 1; //起码根的深度为 1
long long anssum = -11111111111; //定义历史最大值
int ans;//输出最大权值的深度
int nowmax = base + pow(2,height -1); // 当前深度的最大结点数
scanf("%d", &N);
for(int i = 0; i < N; i++)
cin >> tre[i];
for(int i = 0; i < N; i++)
{
sums += tre[i];
if(i == nowmax || i==(N-1))
//遍历到当前深度的最后一个结点了 或者 最大深度的最后一个结点了
{
base = i; //更新当前深度结点数为下一深度的基础
if(sums > anssum) //如果当前深度的权值和大于历史最大值
{
ans = height; //更新答案
anssum = sums; // 更新历史最大值
}
sums = 0; //为下一深度做准备
height += 1; //深度加一
nowmax = base + pow(2, height - 1);//更新最大结点数
}
}
cout << ans;
}