• 51Nod 1019 逆序数 (归并排序)


     1 #include <iostream>
     2 #include <cstring>
     3 
     4 using namespace std;
     5 const int maxn = 50005;
     6 int a[maxn];
     7 int res[maxn];
     8 int ans;
     9 
    10 //归并排序
    11 void merge(int l, int r){
    12     //cout<<l<<"  "<<r<<endl;
    13     int mid = (l + r) >> 1;
    14     int i = l, j = mid + 1;
    15     int cur = l;
    16     while (i <= mid && j <= r){
    17         if (a[i] <= a[j])
    18             res[cur++] = a[i++];
    19         else{
    20             res[cur++] = a[j++];
    21             ans += mid - i + 1;        //找到逆序的个数
    22         }
    23     }
    24     while (i <= mid)    res[cur++] = a[i++];
    25     while (j <= r)    res[cur++] = a[j++];
    26     //排序好后
    27     for (int i = l; i <= r; i++)    a[i] = res[i];
    28 }
    29 void mer_sort(int l, int r){
    30     if (l < r){
    31         int mid = (l + r) >> 1;
    32         mer_sort(l, mid);            //分解
    33         mer_sort(mid + 1, r);        //分解
    34         merge(l, r);                //合并
    35     }
    36 }
    37 int main()
    38 {
    39     int n;
    40     while (cin >> n){
    41         for (int i = 1; i <= n; i++)    cin >> a[i];
    42 
    43         ans = 0;
    44         mer_sort(1, n);
    45         cout << ans << endl;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    day14: 生成器进阶
    day13: 迭代器和生成器
    day12:装饰器的进阶
    day11:装饰器
    day10:函数进阶
    English class 81:How Vulnerability can make our lives better?
    piano class 12
    UE4之循环
    UE4之数组
    UE4中常见的类
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/8653762.html
Copyright © 2020-2023  润新知