题目
有(n≤7)个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1号国家和2号国家踢一场比赛,胜者晋级。3号国家和4号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?
输入输出格式
输入格式
第一行一个整数n,表示一共个国家参赛。
第二行个整数,第i个整数表示编号为i的国家的能力值(1≤i≤)。
数据保证不存在平局。
输出格式
仅一个整数,表示亚军国家的编号。
输入输出样例
输入样例
3
4 2 3 1 10 5 9 7
输出样例
1
代码
#include<cstdio>
#include<iostream>
using namespace std;
int value[260],winner[260],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);
if(value[2]>value[3]){//比较,大的上去成为冠军,小的为亚军
cout<<winner[3];
}
else{
cout<<winner[2];
}
return 0;
}