60pts求调
#include<iostream>
#include<cmath>
using namespace std;
int n;
const int N=128;
struct Node{
int data;
int num;
int lchild,rchild;
};
Node tree[2*N];
void init(int size){
for (int i=1;i<pow(2,size);i++){
tree[i].lchild=2*i;
tree[i].rchild=2*i+1;
}
for (int i=pow(2,size);i<pow(2,size+1);i++){
tree[i].lchild=-1;
tree[i].rchild=-1;
tree[i].num=i;
}
}
int main(){
cin>>n;
init(n);
for (int i=pow(2,n);i<pow(2,n+1);i++){
cin>>tree[i].data;
}
for (int i=n-1;i>0;i--){
for (int j=pow(2,i);j<pow(2,i+1);j++){
if (tree[tree[j].lchild].data>tree[tree[j].rchild].data){
tree[j].num=tree[tree[j].lchild].num;
tree[j].data=tree[tree[j].lchild].data;
} else {
tree[j].num=tree[tree[j].rchild].num;
tree[j].data=tree[tree[j].rchild].data;
}
}
}
if (tree[1].num==tree[2].num){
cout<<tree[3].num-pow(2,n)+1;
} else {
cout<<tree[2].num-pow(2,n)+1;
}
return 0;
}