题目
有(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;
}