zoukankan      html  css  js  c++  java
  • poj_2299Ultra-QuickSort,树状数组离散化

    求逆序数
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct node
    {
        int num;
        int pos;
    };
    node st[500010];
    int reflect[500010];
    int a[500010];
    int n;
    bool cmp(node a,node b)
    {
        return a.num<b.num;
    }
    int lowbit(int x)
    {
        return x&(-x);
    }
    int sum(int x)
    {
        int ret=0;
        while(x>0)
        {
            ret+=a[x];
            x-=lowbit(x);
        }
        return ret;
    }
    void add(int x,int d)
    {
        while(x<=n)
        {
            a[x]+=d;
            x+=lowbit(x);
        }
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            if(!n) break;
            memset(a,0,sizeof(a));
            for(int i=0;i<n;i++)
                {
                    scanf("%d",&st[i].num);
                    st[i].pos=i;
                }
            sort(st,st+n,cmp);
            for(int i=0;i<n;i++)
            {
                reflect[st[i].pos]=i+1;
            }
            long long ans=0;
            for(int i=0;i<n;i++)
            {
                int tem=sum(reflect[i]);
                ans+=i-tem;
                add(reflect[i],1);
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    

  • 相关阅读:
    线程池
    交互
    Java类文件的结构详细介绍
    redis
    弹幕
    约瑟夫环问题
    Redis数据类型和应用场景
    Java集合类整体结构
    JDBC详细介绍
    Mybatis万能Map
  • 原文地址:https://www.cnblogs.com/vactor/p/4099989.html
Copyright © 2011-2022 走看看