#include <cstdio>
#include <iostream>
using namespace std;
int value[260], winner[260];
int n;
void dfs(int x) {
if(x >= 1 << n) return;
else{
dfs(2 * x);
dfs(2 * x + 1);
int lvalue = value[2 * x], rvalue = value[2 * x + 1];
if(lvalue > rvalue) {
value[x] = lvalue;
winner[x] = winner[2 * x];
}
else {
value[x] = rvalue;
winner[x] = winner[2 * x + 1];
}
}
}
int main(){
cin >> n;
for (int i = 0; i < 1 << n; i++){
cin >> value[i + (1 << n)];
winner[i + (1 << n)] = i + 1;
}
dfs(1);
cout<< (value[2] > value[3]) ? winner[3] : winner[2];
return 0;
}
RT,为我照着书上打下来的代码,题目是
这里的输出部分写了
cin >> value[i + (1 << n)]
那么应该是从数组的2n开始记录元素的,但是下面的是$dfs(1); 从1开始搜是要搜什么呢?