归并排序 & 逆序对

归并排序(稳定)

逆序对

例题:洛谷 P1908 逆序对

思路:在归并排序合并时,每当从右段取数时,统计逆序对的数目。

代码:

cpp 复制代码
int n;
int a[N],b[N];
int ans=0;

void msort(int l,int r){
    if(l>=r) return;
    int mid=(l+r)>>1;
    msort(l,mid);
    msort(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; //左边从i开始都大于j指的数
        }
    }
    while(i<=mid) b[k++]=a[i++];
    while(j<=r) b[k++]=a[j++];
    for(i=l;i<=r;i++) a[i]=b[i];
}

void solve(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];

    msort(1,n);

    cout<<ans<<endl;
}
相关推荐
啊哦呃咦唔鱼8 分钟前
LeetCode hot100-3 无重复字符的最长子串
算法·leetcode·职场和发展
phltxy34 分钟前
算法刷题|模拟思想高频题全解(Java版)
java·开发语言·算法
宵时待雨44 分钟前
C++笔记归纳10:继承
开发语言·数据结构·c++·笔记·算法
田梓燊1 小时前
最长的连续序列到底怎么写
算法·哈希算法·散列表
smchaopiao1 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
一叶落4381 小时前
LeetCode 21. 合并两个有序链表(C语言详解 | 链表经典题)
c语言·数据结构·c++·算法·leetcode·链表
阿里嘎多哈基米1 小时前
速通Hot100-Day04——哈希
数据结构·算法·leetcode·哈希算法·散列表
WolfGang0073211 小时前
代码随想录算法训练营 Day10 | 栈与队列 part02
数据结构
飞天狗1111 小时前
最短路算法
算法
汉克老师2 小时前
GESPC++考试五级语法知识(二、埃氏筛与线性筛)课后习题
算法·线性筛·素数·gesp5级·gesp五级·埃氏筛·筛法