全RE求助

P4715 【深基16.例1】淘汰赛

```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


|