zoukankan      html  css  js  c++  java
  • 逆序对

    P1908 逆序对

    做法早就忘了,今回忆一波

    #include<bits/stdc++.h>
    using namespace std;
    long long n,a[500005],b[500005],ans;
    void merge(int l,int r)//分解整个数组
    {
        if(l==r)return;//分解得只有1个元素就收手
        int mid=(l+r)/2;
        merge(l,mid);
        merge(mid+1,r);
        int i=l,j=mid+1,k=l;
        while(i<=mid&&j<=r)//只要没越界
            if(a[i]<=a[j])b[k++]=a[i++];//不符合条件
            else //符合条件
                {
                    b[k++]=a[j++];
                    ans+=mid-i+1;//???
                }
        while(i<=mid) b[k++]=a[i++];
        while(j<=r) b[k++]=a[j++];//处理剩余
        for(int i=l; i<=r; i++)
            a[i]=b[i];//重新赋值
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
            scanf("%lld",&a[i]);
        merge(1,n);
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    滚动条滚动方向
    阶乘函数-尾递归
    返回顶部
    CommonJS
    vuessr
    随机字符串
    indexedDB
    深层次选择器
    Vue3.0简单替代Vuex
    shell 学习笔记
  • 原文地址:https://www.cnblogs.com/yige2019/p/11300567.html
Copyright © 2011-2022 走看看