不算难题,这个树的结构紧凑,只需要记住每个节点的层数,然后统计每一层的和就行
AcWing 1240 完全二叉树的权值
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 10, INF = 1e9;
struct Node{
int t; //权值
int k; //深度
}an[N];
int n;
int res[N];
int ans;
int iu;
int op = -INF;
signed main()
{
cin>>n;
an[1].k = 1;
for(int i = 1; i <= n; i ++ ){
cin>>an[i].t;
an[i].k = an[i / 2].k + 1;
res[an[i].k] += an[i].t;
iu = max(iu, an[i].k);
}
// cout<<"cengshu:"<<iu<<endl;
for(int i = 1; i <= iu; i ++ ){
if(res[i] > op ){
ans = i;
op = res[i];
}
// cout<<res[i]<<"*"<<endl;
}
cout<<ans<<endl;
return 0;
}