完全二叉树的权值(双指针)-原题链接
给定一棵包含
N
N
N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是
A
1
,
A
2
,
⋅
⋅
⋅
A
N
A1,A2,⋅⋅⋅AN
A1,A2,⋅⋅⋅AN,如下图所示:
现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?
如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是 1。
C++#include
#include
#include
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int n;
int a[N];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
int ansdep;
LL anssum = -1e9;
for (int deep = 0, i = 1; i <= n; i++) {
LL sum = 0;
int j;
for (j = i; j <= n && j < (i + (1 << deep)); j++) sum += a[j];
if (sum > anssum) {
ansdep = deep + 1;
anssum = sum;
}
i = j - 1;
deep++;
}
cout << ansdep;
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)