算法1
思路:第一层:循环层数,在循环变量上面加一个d,i是每一层的第一个数的位置,第二层循环求和,j=i,,,,j<i+2^(d-1),在这里2^(d-1)代码写成1<<(d-1)
C++ 代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100010;
typedef long long LL;
int n;
int a[N];
int main(){
scanf("%d",&n) ;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
LL maxs=-1e18;
int depth=0;
for(int d=1,i=1;i<=n;i*=2,d++){//i是每一层的第一个数1,2,4,8
LL s=0;//用来计数
for(int j=i;j<i+(1<<(d-1))&&j<=n;j++){//(1<<(d-1))的意思是2的!!!
//(d-1)次方
s+=a[j];
}
if(s>maxs){
maxs=s;//比较大小,记录层数
depth=d;
}
}
printf("%d",depth);
return 0;
}