• 洛谷 P1428 小鱼比可爱


    题目描述

    人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度[color=red]可能一样[/color]。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。

    输入输出格式

    输入格式:

     

    第一行输入一个整数n,表示鱼的数目。

    第二行内输入n个整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度。

     

    输出格式:

     

    行内输出n个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。

     

    输入输出样例

    输入样例#1:
    6
    4 3 0 5 1 2
    
    输出样例#1:
    0 0 0 3 1 2

    说明

    n<=100

    简单代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,a[110],f[110];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
            for(int j=i;j>=1;j--)
                if(a[i]>a[j]) f[i]++;
        for(int i=1;i<=n;i++)
          printf("%d ",f[i]);
        
        return 0;
    }
    View Code

    树状数组:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,f[1100*3];
    int find(int k)
    {
        int ans=0;
        while(k)
        {
            ans+=f[k];
            k-=k&(-k);
        }
        return ans;
    }
    int add(int k)
    {
        
        while(k<=1000)
        {
            f[k]++;
            k+=k&(-k);
        }
        
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            printf("%d ",find(x));
            add(x+1);// 意为  比 x 大的都加一 
        }
        
        return 0;
    }
  • 相关阅读:
    Python-Image 基本的图像处理操作
    剪枝
    poj1182(食物链)续
    HLG2035广搜
    HLG2040二叉树遍历已知前中,求后
    先序,中序,后序,已知两者求第三者
    C++中new的解说
    僵尸进程
    HLG2062(make,heap问题)
    make_head,,,pop_head,,,push_head,,,sort_head..
  • 原文地址:https://www.cnblogs.com/suishiguang/p/5906457.html
Copyright © 2020-2023  润新知