代码
#include <stdio.h>
#define MAXN 128
#define max(x,y) (x>y)?x:y
#define min(x,y) (x<y)?x:y
int n,STEP,w[MAXN+1],a[MAXN+1];
const signed _2[] = {1,2,4,8,16,32,64,128};
signed DFS(int l,int r,int x){
if(x > n+2)
return 0;
if(l == r+1 || l == r-1)
return max(w[l],w[r]);
int step = max(DFS(l,(l+r)/2,x+1),DFS((l+r)/2+1,r,x+1));
return step;
}
signed main(){
scanf("%d",&n);
for(int i = 1;i <= _2[n];i ++)
scanf("%d",&w[i]);
n = _2[n];
STEP = min(DFS(1,n/2,0),DFS(n/2+1,n,0));
for(int i = 1;i <= n;i ++)
if(STEP == w[i])
return printf("%d",i),0;
return 0;
}