zoukankan      html  css  js  c++  java
  • 树状数组求逆序对

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<stack>
    #define lowbit(x) x&(-x)
    using namespace std;
    struct data
    {
        int pos,val;
        bool operator<(const data a)const
        {
            return val<a.val;
        }
    }a[551000];
    int aa[551000];
    int c[551000],n,cnt;
    inline int sum(int x)
    {
        int res=0;
        for(int i=x;i>=1;i-=lowbit(i))res+=c[i];
        return res;
    }
    inline void add(int x)
    {
        for(int i=x;i<=n;i+=lowbit(i))c[i]++;
    }
    long long ans;
    int main()
    {
        while(~scanf("%d",&n) && n)
        {
            ans=0;
            memset(c,0,sizeof(c));
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i].val);
                a[i].pos=i; 
            }
            sort(a+1,a+n+1);
            cnt=1;
            for(int i=1;i<=n;i++)aa[a[i].pos]=i;
            for(int i=1;i<=n;i++)
            {
                ans+=i-sum(aa[i])-1;
                add(aa[i]);
            } 
            printf("%lld
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    java properties
    js resource
    script Ruby / Rails / Arachni
    webServer / Apache / apache / apache http server / mod_cluster
    JAVA XML open protocol
    二维数组举例
    二维数组
    二维数组
    二维数组
    二维数组
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7762287.html
Copyright © 2011-2022 走看看