#include<cstdio> //两RE
#include<iostream>
#include<set>
#include<queue>
#include<cmath>
using namespace std;
int n;
struct node{
int id,x;
}a[150];
void work(int m)
{
for(int i=1;i<=1<<m-1;i++)
{
if(a[2*i].x>a[2*i-1].x)
{
a[i]=a[2*i];
}
else
{
a[i]=a[2*i-1];
}
}
if(m!=2)
work(m-1);
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=1<<n;i++)
{
cin>>a[i].x;
a[i].id=i;
}
work(n);
if(a[1].x>a[2].x)
cout<<a[2].id;
else
cout<<a[1].id;
return 0;
}
疑惑的是下面这个AC了
#include<cstdio> //AC
#include<iostream>
#include<set>
#include<queue>
#include<cmath>
using namespace std;
int n;
struct node{
int id,x;
}a[150];
void work(int m)
{
if(m==1)
return;
for(int i=1;i<=1<<m-1;i++)
{
if(a[2*i].x>a[2*i-1].x)
{
a[i]=a[2*i];
}
else
{
a[i]=a[2*i-1];
}
}
work(m-1);
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=1<<n;i++)
{
cin>>a[i].x;
a[i].id=i;
}
work(n);
if(a[1].x>a[2].x)
cout<<a[2].id;
else
cout<<a[1].id;
return 0;
}