zoukankan      html  css  js  c++  java
  • 788. 逆序对的数量

    #include <iostream>
    using namespace std;
    
    const int N = 1e6 + 10;
    
    int n;
    int q[N], tmp[N];
    long long cnt;
    
    void merge_sort(int q[], int l, int r)
    {
        if (l >= r) return ;
        
        int mid = (l + r) >> 1;
        merge_sort(q, l, mid);
        merge_sort(q, mid + 1, r);
        
        int i = l, j = mid + 1, k = 0;
        while (i <= mid && j <= r)
        {
            if (q[i] <= q[j])   tmp[k ++] = q[i ++];
            else
            {
                cnt += mid - i + 1;
                tmp[k ++] = q[j ++];
            }
        }
        
        while (i <= mid)    tmp[k ++] = q[i ++];
        while (j <= r)  tmp[k ++] = q[j ++];
        
        for (int i = l, j = 0; i <= r; ++ i, ++ j)  q[i] = tmp[j];
        
        return ;
    }
    
    int main()
    {
        cin >> n;
        for (int i = 0; i < n; ++ i)    cin >> q[i];
        
        merge_sort(q, 0, n - 1);
        
        cout << cnt << endl;
        
        return 0;
    }
  • 相关阅读:
    按键
    bga植球
    数码管
    蜂鸣器
    LED流水灯
    sysTick定时器
    位带
    Android开发
    JavaScript修改src
    JSP笔记
  • 原文地址:https://www.cnblogs.com/mjn1/p/15200709.html
Copyright © 2011-2022 走看看