思路:
-
用数组存储,暴力枚举每一层的权值和,比较找到最小的深度
-
第i层的完全二叉树有2^(i-1)个结点
-
树的深度:long2(n+1)向上取整。注意:库函数里面的log()的底数默认是e,所以这个log()其实就是ln,利用换底公式long2(n+1)可以表示为long(n+1)/long2
-
celi()函数,返回大于或等于深度的最小的整数值。
//正确通过
#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main()
{
int n;
cin>>n;
//int a[N];
for(int i=0;i<n;i++){
cin>>a[i];
}
int dep=1;//记录深度
int t=0;//指向位置
int amax=-10000000;
for(int i=0;i<=ceil(log(n+1)/log(2));i++){
int sum=0;
for(int j=1;j<=pow(2,i);j++){
sum=sum+a[t];
t++;
}
if(sum>amax){
amax=sum;
dep=i+1;
}
}
cout<<dep<<endl;
return 0;
}