zoukankan      html  css  js  c++  java
  • HDU 3743 Frosh Week(归并排序求逆序数)

      归并排序求逆序数

    #include <iostream>
    #include <cstdio>
    using namespace std;
    #define maxn 1000005
    int a[maxn], temp[maxn];
    long long ans;
    void MergeSort(int a[], int l, int mid, int r)
    {
        int k=0;
        int i = l, n = mid, j = mid, m = r;
        while ( i<n && j<m )
        {
            if (a[i] <= a[j])
            {
                temp[k++] = a[i++];
            }
            else
            {
                ans += n-i;
                temp[k++] = a[j++];
            }
        }
        while (i<n)
            temp[k++] = a[i++];
        while (j<m)
            temp[k++] = a[j++];
        for (int t = 0; t<k; ++t)
            a[l+t] = temp[t];
    }
    void Sort(int a[], int l, int r)
    {
        if (r-l<=1)
            return ;
        int mid = (l+r)>>1;
        Sort(a, l, mid);
        Sort(a, mid, r);
        MergeSort(a, l, mid, r);
    }
    
    int main()
    {
        int n;
        while (~scanf("%d", &n))
        {
            for (int i=0; i < n; ++i)
                scanf("%d", &a[i]);
            ans = 0;
            Sort(a, 0, n);
            printf("%lld
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    concurrent-锁
    字符串查找字符串
    指针作为函数返回值
    数组名作为函数参数
    指针和函数
    多级指针
    指针数组
    指针运算
    指针和数组
    const修饰的指针类型
  • 原文地址:https://www.cnblogs.com/jifahu/p/5449514.html
Copyright © 2011-2022 走看看