zoukankan      html  css  js  c++  java
  • 【CodeVS1688】求逆序对

    Description

    给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目

    Input

    第一行为n,表示序列长度,接下来的n行,第i+1行表示序列中的第i个数。

    Output

    所有逆序对总数.

    Sample Input

    4

    3

    2

    3

    2

    Sample Output

    3

    HINT

    数据范围:N<=105。Ai<=105。时间限制为1s。

    题解

    归并排序,合并的时候,如果a[i]>a[j],那么a[i~mid]>a[j],所以给ans加上mid-i+1

    #include<cstdio>
    using namespace std;
    const int N=1000010;
    int a[N],b[N],c[N];
    int n;
    long long ans;
    void MergeSort(int l,int r)
    {
        if (l==r) return;
        int mid=(l+r)/2;
        MergeSort(l,mid);    MergeSort(mid+1,r);
        int i=l,j=mid+1,p=l;
        while (i<=mid && j<=r)
        {
            if (a[i]>a[j]) c[p++]=a[j++],ans+=mid-i+1;
                else c[p++]=a[i++];
        }
        while (i<=mid) c[p++]=a[i++];
        while (j<=r) c[p++]=a[j++];
        for (int i=l;i<=r;i++) a[i]=c[i];
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++) scanf("%d",&a[i]);
        MergeSort(1,n);
        printf("%lld",ans);
    }
  • 相关阅读:
    jdk安装
    ubuntu 搜狗输入法成功安装
    matlab load
    matlab save 命令
    数字信号处理的思考
    非最大值抑制nms
    HMM,MEMM,CRF模型
    [bzoj2301][HAOI2011]Problem b
    [洛谷P3935]Calculating
    [bzoj4816][Sdoi2017]数字表格
  • 原文地址:https://www.cnblogs.com/liumengyue/p/5223068.html
Copyright © 2011-2022 走看看