试题G 完全二叉树的权值

 

复制代码
#include <iostream>
using namespace std;

typedef long long ll;  //题目最小最大值为10^5,int的范围是-2^9到2^9,所以不能用int

int main() {
    int n;
    cin >> n;
    ll a[100010];
    for (ll i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int max = -1e18, h = 0;
    for (ll i = 1, dep = 1; i <= n; dep++, i *= 2) { //i表示每一层的起点,dep表示深度,每次深度都加1,
        ll sum = 0;
        for (int j = i; j < i + (1 << (dep - 1)) && j <= n; j++)  
            sum += a[j];
        if (sum > max) {
            max = sum;
            h = dep;
        }
    }
    cout << h;
    return 0;
}
复制代码

注意:位运算1<<dep-1 相当于2^(dep-1) ,<<表示向左移动几位,>>表示向右移动几位。比如,1<<2  ,1的二进制为0001,向左移动2位就是0100,即2^2=4。同理,>> 也一样。

 

posted @   湘summer  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示