zoukankan      html  css  js  c++  java
  • HDOJ3743<分治>

    题意:求一个排列的逆序数。

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    const int maxn=1000005;
    int maze[maxn],temp[maxn];
    long long  ans;
    void union_set(int l,int mid,int r)
    {
        int i=l,j=mid+1,k=0;
        while(i<=mid&&j<=r){
            if(maze[i]>maze[j]){
                ans+=mid+1-i;
                temp[k++]=maze[j++];
            }
            else temp[k++]=maze[i++];
        }
        while(i<=mid)temp[k++]=maze[i++];
        while(j<=r)  temp[k++]=maze[j++];
        for(int i=0;i<k;i++)
            maze[l+i]=temp[i];
        
    }
    void merge_sort(int l,int r)
    {
        if(l==r)return ;
        int mid=(l+r)/2;
        merge_sort(l,mid);
        merge_sort(mid+1,r);
        union_set(l,mid,r);
    }
    int main ()
    {
        int n;
        while(~scanf("%d",&n))
        {
            ans=0;
            for(int i=0;i<n;i++)
                scanf("%d",&maze[i]);
            merge_sort(0, n-1);
            printf("%lld
    ",ans);
        }
        return 0;
    }


    想的太多,做的太少。
  • 相关阅读:
    HWOJ之纠结的优化
    java中的对象数组
    短路特性的运用
    归并排序
    两个有序数列的合并
    java中的注释规范
    堆排序
    堆的建立
    希尔排序
    直接插入排序
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115678.html
Copyright © 2011-2022 走看看