该题主要是二叉树的相关知识考察,掌握二叉树的数学规律,使用两重循环就可以做出来。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
typedef long long LL;
int n;
int b[N];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
LL maxs = -1e18;
int depth = 0;
for (int i = 1, d = 1; i < n; i *= 2, d++) { //按层进行遍历
LL s = 0;
for (int j = i; j < i + (1 << d - 1) && j <= n; j++) { //统计每层的权值之和
s += b[j];
}
if (s > maxs) {
maxs = s;
depth = d;
}
}
printf("%d\n", depth);
return 0;
}