弱弱的用bfs过了,双指针再说吧。。。
#include<iostream>
#include<queue>
using namespace std;
#define LL long long
typedef struct{
int v, u, idx;
}Node;
const int N = 100010, M = 20;
int tr[N];
int n;
LL level[M];
int cnt;
void bfs(){
queue<Node> q;
q.push({tr[1], 1, 1});
while(q.size()){
auto h = q.front();
q.pop();
int v = h.v, u = h.u, idx = h.idx;
level[u] += v;
cnt = max(cnt, u);
if(idx * 2 <= n) q.push({tr[idx * 2], u + 1, idx * 2});
if(idx * 2 + 1 <= n) q.push({tr[idx * 2 + 1], u + 1, idx * 2 + 1});
}
}
int main(){
cin >> n;
for(int i = 1; i <= n; i ++) cin >> tr[i];
bfs();
LL maxv;
int res;
for(int i = 1; i <= cnt; i ++){
if(i == 1){
maxv = level[1];
res = 1;
}else if(maxv < level[i]){
maxv = level[i];
res = i;
}
}
cout << res << endl;
return 0;
}