2019蓝桥杯c/c++b组--G

完全二叉树 从一开始分1 2 4 8 … 2^t 份 找各分和的最大值就行了
注意初始化ans和ansl(ansl其实不用)

#include 
#include 
#include 
using namespace std;
int n;
int arr[100005];
long long add[50];
long long ans=-1000000000;
long long ansl=0;

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
    int nn=n;
    int t=1,ee=1;
    while(nn>0){
        nn-=ee;
        t++;
        ee*=2;
    }
    t--;
    //printf("%d",t);
    int tttt=1;
    int in=0;
    for(int i=0;i<t;i++){
        for(int j=0;j<tttt;j++){
            add[i]+=arr[in++];
        }
        if(add[i]>ans){
            ans=add[i];
            ansl=i;
        }
        tttt*=2;
    }
    printf("%d",ansl+1);
    return 0;
}

你可能感兴趣的:(2019蓝桥杯c/c++b组--G)