• 洛谷 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;
    }
  • 相关阅读:
    规约先行-(六)并发处理
    MySQL选择合适的方式存储时间
    规约先行-(五)集合处理
    规约先行-(四)OOP 规约
    12.20-LaTex git workflow
    6.25-ROS 软件度量
    6.19-rosdoc_lite and 文档构建工具
    12.27-ros-decision making
    12.3-分级并发有限状态机-SMACH
    12.07-rostest学习
  • 原文地址:https://www.cnblogs.com/suishiguang/p/5906457.html
Copyright © 2020-2023  润新知