zoukankan      html  css  js  c++  java
  • 788. 逆序对的数量(归并排序的应用)

    题目链接:

    https://www.acwing.com/problem/content/790/

    题解:

    左边部分的下标必定小于右边部分的下标,且左右两边都排好序了,计算即可。

    AC代码:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    typedef long long LL;
    
    const int N = 1e5+5;
    int a[N],tmp[N];
    int n;
    
    LL merge_sort(int a[],int l,int r){
        if(l >= r) return 0;
        
        int mid = l + r >> 1;
        
        LL res = merge_sort(a,l,mid) + merge_sort(a,mid+1,r);
        
        int k = 0,s1 = l,s2 = mid + 1;
        
        while(s1 <= mid && s2 <= r){
            if(a[s1] <= a[s2]) tmp[k++] = a[s1++];
            else{
                res += mid - s1 + 1;
                tmp[k++] = a[s2++];
            }
        }
        
        while(s1 <= mid) tmp[k++] = a[s1++];
        while(s2 <= r) tmp[k++] = a[s2++];
        
        for(int i=l,j=0;i <= r;i++,j++) a[i] = tmp[j];
        
        return res;
    }
    
    
    int main(){
        scanf("%d",&n);
        
        for(int i=0;i<n;i++) scanf("%d",&a[i]);
        
        LL res = merge_sort(a,0,n-1);
        
        printf("%lld",res);
        
        return 0;
    }
  • 相关阅读:
    线程状态
    JVM的运行
    HBase与Protobuf
    HBase Java API
    HBase全分布式部署
    HBase 伪分布式搭建
    HBase架构
    mysql存储引擎中InnoDB与Myisam的区别及应用场景
    mysql5.6 主从配置
    Mongodb3.4安装
  • 原文地址:https://www.cnblogs.com/doubest/p/12307305.html
Copyright © 2011-2022 走看看