使用了queue中的pair方法,这是一种简单方法解决那种22匹配问题的,这道题也可以用建树来解决,但是会比较麻烦,远没有这样简单、清晰。另外这种方法也可以用来使用其他类似的问题。
#include<bits/stdc++.h>
using namespace std;
//P4715 【深基16.例1】淘汰赛
queue<pair<int,int> > q;
int main() {
int n;
cin>>n;
n = 1<<n;
for(int i = 1; i <= n; i++) {
int x;
cin>>x;
q.push(make_pair(i,x));
}
while(q.size()>2) {
pair<int,int> r1,r2;
r1 = q.front();
q.pop();
r2 = q.front();
q.pop();
if(r1.second>r2.second) {
q.push(r1);
} else {
q.push(r2);
}
}
pair<int,int> r1,r2;
r1 = q.front();
q.pop();
r2 = q.front();
q.pop();
if(r1.second>r2.second){
cout<<r2.first<<endl;
}else{
cout<<r1.first<<endl;
}
return 0;
}