分析:數據結構裏面完全二叉樹關於深度的定理:depth=[log2(index)]+1
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005;//最大範圍
int num[maxn];
long long ans[30];//maxn<100005,深度最大不超過17,GetDepth(maxn)==17
///*數據結構裏面完全二叉樹深度是有定理公式的[log2(index)]+1*///
int GetDepth(int index) {
return floor(log2(index)) + 1;
}
int main() {
int n;
//輸入
cin >> n;
for (int i = 1; i <= n; i++)
cin >> num[i];
//計算
int maxSumDepth = 1;//和值最大的深度
int maxDepth = GetDepth(n);//當前完全二叉樹最大深度
memset(ans, 0, sizeof(ans));//樹每層和值初始化爲0
for (int i = 1; i <= n; i++) {//遍歷樹的每個結點值
int currentDepth = GetDepth(i);//根據下標求得該結點的深度值
ans[currentDepth] += num[i];//深度值一致的進行累和
maxSumDepth = ans[currentDepth] > ans[maxSumDepth] ? currentDepth : maxSumDepth;//有最大累和值出現就替換最大和值的深度
}
//輸出
cout << maxSumDepth << endl;
return 0;
}
/*
樣例1:
7
1 6 5 4 3 2 1
結果:2層
樣例2:
7
9 4 4 2 2 2 1
結果:1層
樣例3:
7
9 4 4 3 3 3 1
結果:3層
樣例4:
15
9 4 6 3 3 3 2 1 1 1 1 1 1 1 1
結果:3層
*/