zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Ceph
    linux五天光速入门
    shell编程
    Docker&K8S&持续集成与容器管理--系列教程
    openstack系列
    爬虫快速入门
    python奇闻杂技
    机器学习
    数据分析
    量化分析
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/8653762.html
Copyright © 2011-2022 走看看