```cpp
const int maxn=128
也一样RE,谢谢
by 执信周博轩 @ 2021-03-18 13:46:50
这道题说最多有2^7支队伍,但是没说每个队能力值最大为2^7,所以不能直接以能力值为下标,要先离散化
by tengzifan @ 2021-03-19 13:11:30
我已经帮你改好啦,要的话私发
by tengzifan @ 2021-03-19 13:12:00
收到,谢谢大佬!
by 执信周博轩 @ 2021-03-19 18:30:24
@[tengzifan](/user/197534) 已AC,谢谢大佬!
### map版
```cpp
#include<bits/stdc++.h>
using namespace std;
const int maxn=130;
int tree[maxn*4],a[maxn];
map<int,int> id;
int lisan[maxn];
int sum=1;
int n;
inline void build(int l,int r,int k){
if(l==r){
tree[k]=a[l];
return;
}
int mid=((l+r)/2);
build(l,mid,k<<1);
build(mid+1,r,k<<1|1);
tree[k]=max(tree[k<<1],tree[k<<1|1]);
}
signed main(){
scanf("%d",&n);
n=(1<<n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
id[a[i]]=i;
}
build(1,n,1);
printf("%d\n",id[min(tree[2],tree[3])]);
return 0;
}
by 执信周博轩 @ 2021-03-19 19:21:07
### STL离散化版
```cpp
#include<bits/stdc++.h>
using namespace std;
const int maxn=130;
int tree[maxn*4],a[maxn],id[maxn];
int lisan[maxn];
int sum=1;
int n,m;
inline void build(int l,int r,int k){
if(l==r){
tree[k]=a[l];
return;
}
int mid=((l+r)/2);
build(l,mid,k<<1);
build(mid+1,r,k<<1|1);
tree[k]=max(tree[k<<1],tree[k<<1|1]);
}
signed main(){
scanf("%d",&n);
n=(1<<n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
lisan[i]=a[i];
}
sort(lisan+1,lisan+n+1);
m=unique(lisan+1,lisan+n+1)-lisan-1;
for(int i=1;i<=n;i++){
a[i]=lower_bound(lisan+1,lisan+m+1,a[i])-lisan;
}
n=m;
for(int i=1;i<=n;i++){
id[a[i]]=i;
}
build(1,n,1);
printf("%d\n",id[min(tree[2],tree[3])]);
return 0;
}
by 执信周博轩 @ 2021-03-19 19:27:09
@[tengzifan](/user/197534) 是真的,我试过了,已经RE好多次了,必不能以能力值为一个数组的下标
by YawYee_TnT @ 2021-07-18 17:09:45