zoukankan      html  css  js  c++  java
  • UVa 10810

    题目大意:给出一个数列,每次交换相邻数字,求排成递增序的最少交换次数。

    分析:求逆序数,合并排序

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #define maxn 5000010
    using namespace std;
    int a[maxn],tem[maxn],n;
    long long Sort(int l,int r)
    {
    if(l<r)
    {
    long long L=Sort(l,(l+r)/2);
    long long R=Sort((l+r)/2+1,r);
    int p=l,mid1=(l+r)/2,mid2=(l+r)/2+1;
    int k=l;
    while(p<=mid1||mid2<=r)
    {
    if(mid2<=r&&(p>mid1||a[p]>a[mid2]))
    {
    tem[k++]=a[mid2++];
    L+=mid1-p+1;
    }
    else
    tem[k++]=a[p++];
    }
    for(int i=l;i<=r;i++)
    a[i]=tem[i];
    return L+R;
    }
    else
    return 0;
    }

    int main()
    {

    while(scanf("%d",&n)!=EOF&&n)
    {
    for(int i=0; i<n; i++)
    scanf("%d",&a[i]);
    printf("%lld ",Sort(0,n-1));
    }
    return 0;
    }

  • 相关阅读:
    两数之和
    swift 结构体
    打家劫舍II
    Swift的访问控制讲解
    swift版 二分查找 (折半查找)
    RAC(ReactiveCocoa)介绍(一)
    变位词
    双向循环链表
    单链表
    顺序链表(C++)
  • 原文地址:https://www.cnblogs.com/tsw123/p/4333048.html
Copyright © 2011-2022 走看看