#include
#include
#include
#include
using namespace std;
using LL = long long;
struct TreeNode {
int val;
TreeNode *left, *right;
TreeNode(int _val) : val(_val), left(nullptr), right(nullptr) {};
~TreeNode() {};
};
int n, x;
TreeNode* buildTree(vector& nums) {
// corner case
if (nums.empty()) return nullptr;
auto root = new TreeNode(nums.front());
queue q{{root}};
int idx = 0;
while (not q.empty()) {
auto cur = q.front(); q.pop();
int left_idx = idx << 1 | 1;
int right_idx = (idx << 1) + 2;
if (left_idx >= n) break;
cur->left = new TreeNode(nums[left_idx]);
q.emplace(cur->left);
if (right_idx >= n) break;
cur->right = new TreeNode(nums[right_idx]);
q.emplace(cur->right);
++idx;
}
return root;
}
int levelOrder(TreeNode* root) {
queue q{{root}};
int level = 0, max_level = 0;
LL max_sum = LONG_MIN;
while (not q.empty()) {
++level;
LL sum = 0;
auto sz = q.size();
while (sz--) {
auto cur = q.front(); q.pop();
sum += cur->val;
if (cur->left) q.emplace(cur->left);
if (cur->right) q.emplace(cur->right);
}
if (sum > max_sum) {
max_sum = sum;
max_level = level;
}
}
return max_level;
}
int main(void) {
scanf("%d", &n);
vector nums;
for (int i = 0; i < n; ++i) {
cin >> x;
nums.emplace_back(x);
}
cout << levelOrder(buildTree(nums)) << endl;
}