P4913【黄】
这题好像可以用线段树什么的高级做法来做,但我感觉我这个简单做法不管是时间还是空间都和那些复杂的做法差不了太多。重点是很优雅,思路非常简单,而且代码很短,用OOP思想写成的代码可读性极高,不用注释估计都很清晰。
Code
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
using namespace std;
int intpow(int a,int b){int ans=1;for(int i=1;i<=b;i++)ans*=a;return ans;}
struct node
{
int name,aby;
friend bool operator<(node A,node B){return A.aby<B.aby;}
node(){}
node(int a,int b){name=a;aby=b;}
};
node a[500];
int n,N;
int main()
{
cin>>n;
N=intpow(2,n);
for(int i=N;i<2*N;i++)
cin>>a[i].aby,a[i].name=i-N+1;
for(int i=N-1;i>=0;i--)
a[i]=max(a[i*2],a[i*2+1]);
cout<<min(a[2],a[3]).name;
return 0;
}