洛谷P4715 淘汰赛
【深基16.例1】淘汰赛
题目描述
有 2 n 2^n 2n( n ≤ 7 n\le7 n≤7)个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?
输入格式
第一行一个整数 n n n,表示一共 2 n 2^n 2n 个国家参赛。
第二行 2 n 2^n 2n 个整数,第 i i i 个整数表示编号为 i i i 的国家的能力值( 1 ≤ i ≤ 2 n 1\leq i \leq 2^n 1≤i≤2n)。
数据保证不存在平局。
输出格式
仅一个整数,表示亚军国家的编号。
样例 #1
样例输入 #1
3
4 2 3 1 10 5 9 7
样例输出 #1
1
正确的代码
//
// Created by 枫飘长安 on 2024/4/14.
//
#include <bits/stdc++.h>
using namespace std;
/**
*author: 枫飘长安
*date: 2024/4/14
*fileName: P4715.cpp
*description: TODO
**/
typedef long long ll;
const int MAXN = 1e6+10;
int n;
struct node {
int val;
int id;
}a[MAXN];
bool cmp (node a, node b) {
return a.val > b.val;
}
int main (){
cin >> n;
n = pow(2,n);
for (int i = 1; i <= n; i++) {
cin >> a[i].val;
a[i].id = i;
}
sort(a+1,a+1+n/2,cmp);
sort(a+1+n/2,a+n+1,cmp);
if (a[1].val > a[n/2+1].val) {
cout << a[n/2+1].id;
} else {
cout << a[1].id;
}
return 0;
}