大佬帮忙看看,为什么WA啊?

P4715 【深基16.例1】淘汰赛

首先函数里的 $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


|