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

#include<bits/stdc++.h> 
using namespace std;
struct {
	int num;//编号 
	int val;//结点值 
}a[1000];
int main(){
//处理乘方的方法 
//cout<<(2<<3);   a<<b表示a化成二进制后左移b位 ,如左边案例是10->10000答案是16 
//cout<<pow(2,3) ;pow(a,b)表示a的b次方
int n;
cin>>n;
int k=1;
//输入 
for(int i=pow(2,n);i<pow(2,n+1);i++) {
	a[i].num=k;
	cin>>a[i].val;
	k++;
}
//处理编号为2的n次方-1~1 从下往上递归求
for(int i=pow(2,n)-1;i>=1;i--) {
	if(a[i*2].val>a[2*i+1].val){
		a[i].num=a[i*2].num;
		a[i].val=a[i*2].val;
	}
	else{
		a[i].num=a[i*2+1].num;
		a[i].val=a[i*2+1].val;
	}
}
	if(a[2].val>a[3].val){
	cout<<a[3].num;
	}
	else{
		cout<<a[2].num;
	}
	return 0;
}

 

posted @ 2025-06-27 08:41  Annaprincess  阅读(13)  评论(0)    收藏  举报