其他分享
首页 > 其他分享> > AcWing 244. 谜一样的牛

AcWing 244. 谜一样的牛

作者:互联网

有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高。

现在这n头奶牛站成一列,已知第i头牛前面有a头牛比它低,求每头奶牛的身高。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],c[N],h[N],n;
int lowbit(int x){return x&-x;}
void add(int x,int ad){while(x<=n)c[x]+=ad,x+=lowbit(x);}
int ask(int x){
    int ans=0;
    while(x){
        ans+=c[x];
        x-=lowbit(x);
    }
    return ans;
}
int erfen(int x){
    int l=1,r=n;
    while(l<r){
        int mid=(l+r)>>1;
        if(ask(mid)<x)l=mid+1;else r=mid;
    }
    return r;
}
int main(){
    cin>>n;
    for(int i=2;i<=n;i++)scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)add(i,1);
    for(int i=n;i;i--)
    {
        h[i]=erfen(a[i]+1);
        add(h[i],-1);
    }
    for(int i=1;i<=n;i++)printf("%d\n",h[i]);
    return 0;
}

 

标签:身高,头牛,已知,谜一样,244,int,每头,奶牛,AcWing
来源: https://www.cnblogs.com/1314cyd/p/14355509.html