试题G 完全二叉树的权值
#includeusing 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<