水题~。
注意权值和可能会爆int。
const int N=1e5+10;
int val[N];
LL sum[N];
int n;
int maxd;
void dfs(int u,int d)
{
if(u > n) return;
maxd=max(maxd,d);
sum[d]+=val[u];
dfs(u*2,d+1);
dfs(u*2+1,d+1);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>val[i];
dfs(1,1);
int idx=1;
for(int i=1;i<=maxd;i++)
if(sum[i] > sum[idx])
idx=i;
cout<<idx<<endl;
//system("pause");
return 0;
}