首先函数里的 $n$ 和全局的 $n$ 冲突了
,导致 $n$ 恒小于$2^n$
然后就是最后找亚军的循环条件,节点个数有$2^n$个,你的代码里直接扔个$n$上去自然要输出空
[已AC](https://www.luogu.com.cn/record/36960357)
```cpp
#include<bits/stdc++.h>
using namespace std;
inline int lc(int x){
return x<<1;
}
inline int rc(int x){
return (x<<1)|1;
}
int T[10000]={0};
int arr[10005];
int n,cnt=1;
void updata(int x,int lm) //递归更新树
{ //n当前节点,lm节点总数
if(!T[lc(x)]&&lc(x)<=lm)
updata(lc(x),lm);
if(!T[rc(x)]&&rc(x)<=lm)
updata(rc(x),lm);
if(x<1<<n)
T[x]=max(T[lc(x)],T[rc(x)]);
}
int main()
{
scanf("%d",&n);
int d=1<<n; //肯定满二叉
for(int i=d;i<d+(1<<n);i++)//直接输入叶子节点
{
scanf("%d",&T[i]);
arr[cnt++]=T[i];
}
updata(1,(1<<n+1)-1); //向上更新
int temp=min(T[2],T[3]);
// cout<<T[2]<<' '<<T[3]<<endl;
for(int i=1;i<=(1<<n);i++)//找到亚军对应号码
{
// cout<<arr[i]<<endl;
if(arr[i]==temp)
{
printf("%d",i);
return 0;
}
}
}
```
by RemiliaScar1et @ 2020-08-13 21:21:59
@[赤红の幼月](/user/278259) 感谢大佬
by lyc呐 @ 2020-08-13 22:20:27
这个n当初扔的实属尴尬
by lyc呐 @ 2020-08-13 22:25:55