zoukankan      html  css  js  c++  java
  • 逆序数

    51Nod

    在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
     
    如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。
    Input
    第1行:N,N为序列的长度(n <= 50000)
    第2 - N + 1行:序列中的元素(0 <= A[i] <= 10^9)
    Output
    输出逆序数
    Input示例
    4
    2
    4
    3
    1
    Output示例
    4

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<map>
    #define N 52005
    using namespace std;
    int a[N],c[N],d[N];
    
    int Lowbit(int t)
    {   ///设k为t末尾0的个数,则求得为2^k=t&(t^(t-1));
        return t&(t^(t-1));
    }
    void update(int x)
    {
        while(x > 0)
        {
            c[x]+=1;
            x -= Lowbit(x);
        }
    }
    int sum(int li)
    {
        int sum=0;
        while(li<=N)
        {
            sum+=c[li];
            li=li+Lowbit(li);
        }
        return sum;
    }
    
    map<int ,int>q;
    int main()
    {
        int n,x;
        int Sum;
        while(scanf("%d",&n)!=EOF)
        {
            Sum=0;
            memset(c,0,sizeof(c));
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                d[i]=a[i];
            }
    
            sort(a,a+n);
            int pre=1,tot=1;
            for(int i=0;i<n;i++)
            {
                if(a[i]==pre)
                {
                    a[i]=tot;
                    q[pre]=tot;
                }
                else
                {
                    pre=a[i];
                    a[i]=++tot;
                    q[pre]=tot;
                }
            }
    
            for(int i=0;i<n;i++)
            {
                d[i]=q[d[i]];
            }
    //        for(int i=0;i<n;i++)
    //            cout<<d[i]<<" ";
            for(int i=0;i<n;i++)
            {
                Sum+=sum(d[i]+1);
                update(d[i]);
            }
            printf("%d
    ",Sum);
        }
        return 0;
    }
  • 相关阅读:
    几种排序(c#实现)
    仿 MVC 三大特性
    自定义顺序表ArrayList
    MSMQ消息队列
    IIS 负载均衡(ARR)
    AOP 编程
    SqlServer 存储过程
    mac下mysql5.7.10密码问题
    gearman参数说明
    增加响应header让ajax支持跨域
  • 原文地址:https://www.cnblogs.com/chen9510/p/5466970.html
Copyright © 2011-2022 走看看