算法2
(暴力枚举) $O(n)$
时间复杂度
目测 时间复杂度为O(n)
注意
建议存储每层结点”和的值的变量定义为long long型 因为数据范围会超过int范围。我比较懒,就全部定义成Longlong 了
C++ 代码
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 100010;
long long nums[N];
long long maxNum;
long long max1;
long long flo=1;
int main(){
long long n;
long long k;
cin>>n;
for(long long i=0;i<n;i++) //
cin>>nums[i];
for(long long i=1;i<n;i++){
if((pow(2,i)-1)>=n){
k=i;
break;
}
}
maxNum=nums[0];
long long j=0;
long long ck=n;
for(long long i=1;i<=k;i++){
long long m=pow(2,i-1);
max1=0;
while(1){
if(m==0||ck==0)
break;
max1+=nums[j];
j++;
m--;
ck--;
}
if(maxNum<max1){
maxNum=max1;
flo=i;
}
}
cout<<flo<<endl;
return 0;
}