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

















