zoukankan      html  css  js  c++  java
  • 洛谷 P1908 逆序对

    https://www.luogu.org/problemnew/show/P1908

    递归与分治

    其实只需要在归并排序的时候加上一个计数的语句就好啦

    #include<bits/stdc++.h>
    
    using namespace std;
    
    long long int n,a[500005],c[500005],sums;  //题目数据有点大 需要long long
     
    void guibing(int s,int e)
    {
        if(s==e)
        return;
        int mid=(s+e)/2,i=s,j=mid+1,k=s;
        guibing(i,mid),guibing(j,e);
        while(i<=mid&&j<=e)
        {
            if(a[i]<=a[j])
            c[k++]=a[i++];
            else
            {
                c[k++]=a[j++];
                sums+=mid-i+1;   //计数
            }
        }
        while(i<=mid)
        c[k++]=a[i++];
        while(j<=e)
        c[k++]=a[j++];
        for(i=s;i<=e;i++)
        a[i]=c[i];     //将排好序的复制回去
        return;
    }
    
    
    int main()
    {
        int i;
        cin>>n;
        for(i=1;i<=n;i++)
        cin>>a[i];
        guibing(1,n);
        cout<<sums;
    }
  • 相关阅读:
    几个基本trick
    CSP2019 树上的树 口胡
    To do List
    对代码风格的探索(持续更新)
    我回来了。
    年度悲剧
    最短路
    平衡树
    线段树-模板
    jmeter断言之JSON Assertion
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/10699528.html
Copyright © 2011-2022 走看看