@[mamba2400](/user/389268)
思路有点像线段树,但好像不用这么麻烦
我的思路是把每一层的状态转移到下一层(有点dp的感觉),最后在判断输出亚军而不是冠军
Code:
```cpp
#include<cstdio>
using namespace std;
int n,l;
struct data{
int val,id;
}a[10][130];
int pow(int n,int x){
int m=n;
for(int i=1;i<x;i++)n*=m;
return n;
}
data max(data a,data b){
return a.val>b.val?a:b;
}
int main()
{
std::ios::sync_with_stdio(0);
cin>>l;
n=pow(2,l);
for(int i=1;i<=n;i++)
cin>>a[0][i].val,a[0][i].id=i;
for(int i=1;i<=l;i++,n/=2)
for(int j=1,k=1;j<=n;j+=2,k++)
a[i][k]=max(a[i-1][j],a[i-1][j+1]);
cout<<(a[l-1][1].val>a[l-1][2].val?a[l-1][2].id:a[l-1][1].id)<<endl;
return 0;
}
```
自己理解,直接交有惊喜呦
by Zvelig1205 @ 2021-08-10 11:26:53
@[极冬寒雪](/user/413020) 亿点点惊喜,谢谢你!
by LeM0NAdE @ 2021-08-10 17:59:13