C/C++教程

acw.244. 谜一样的牛

本文主要是介绍acw.244. 谜一样的牛,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

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

输入格式

第 1行:输入整数 nn。

第 2..n行:每行输入一个整数 Ai,第 i行表示第 i 头牛前面有Ai 头牛比它低。
(注意:因为第 1 头牛前面没有牛,所以并没有将它列出)

输出格式

输出包含 n行,每行输出一个整数表示牛的身高。

第 i 行输出第 i 头牛的身高。

数据范围

1≤n≤105

笔记: 树状数组可以记录sum(x),1~x的前缀和,x前缀和记录身高比x小的牛的数量,和二分结合找sum(x)=k+1。

打卡:https://www.acwing.com/file_system/file/content/whole/index/content/2754779/

int main(){
    cin>>n;
    for(int i=2;i<=n;i++)cin>>h[i];
    for(int i=1;i<=n;i++)tr[i]=lowbit(i);
    for(int i=n;i;i--){
        int k=h[i]+1;
        int  l=1,r=n;
        while(l<r){
            int mid=(l+r+1)>>1;
            if(sum(mid)<k)l=mid;
            else r=mid-1;
        }
        ans[i]=l;
        add(l,-1);
    }
    for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
    return 0;
}

  

这篇关于acw.244. 谜一样的牛的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!