zoukankan      html  css  js  c++  java
  • SGU 180 Inversions 逆序数

    --------------

    int n;
    int a[maxn];
    int b[maxn];
    
    struct BIT{
        int n;
        int tree[maxn];
        void init(int n){
            this->n=n;
            memset(tree,0,sizeof(tree));
        }
        int lowbit(int x){
            return x&(-x);
        }
        void add(int x,int val){
            for (int i=x;i<=n;i+=lowbit(i)) tree[i]+=val;
        }
        int query(int x){
            int ret=0;
            for (int i=x;i>0;i-=lowbit(i)) ret+=tree[i];
            return ret;
        }
        //离散 p=lower_bound(b+1,b+n+1,a[i])-b;
        //逆序数 x=(i-1)-query(p);add(p,1);
    }bt;
    
    int main(){
        cin>>n;
        bt.init(n);
        for (int i=1;i<=n;i++){
            cin>>a[i];
            b[i]=a[i];
        }
        sort(b+1,b+1+n);
        LL sum=0;
        for (int i=1;i<=n;i++){
            int p=lower_bound(b+1,b+n+1,a[i])-b;
            int x=i-1-bt.query(p);
            bt.add(p,1);
            sum+=x;
        }
        cout<<sum<<endl;
    	return 0;
    }
    


    --------------

  • 相关阅读:
    Java语言
    包名规范
    带参数的方法
    成员变量和局部变量
    Java数据类型
    java反射机制
    JDK安装
    注释
    二维数组
    数组的经典排序
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681635.html
Copyright © 2011-2022 走看看