(Day15) 算法复健运动for蓝桥杯-分治&归并排序

(Day14) 算法复健运动for蓝桥杯-分治&归并排序

分而治之,个人理解就是类似递归,就是把大问题转化为子问题,然后一步步解决的

例子:
归并排序讲解:
https://www.cnblogs.com/chengxiao/p/6194356.html
就是先用递归把数字分开,然后再按照顺序把两头合并。用双指针合并

归并排序找逆序对:
例题:https://www.luogu.com.cn/problem/solution/P1908
用ij双指针排查的时候,找到顺序是逆序的
AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+9;
int a[N];
int c[N];
ll ans=0;
void msort(int l,int r)
{
    if(l==r)
        return ;
    int  mid=(l+r)/2;
    msort(l,mid);
    msort(mid+1,r);
    int i=l,j=mid+1;
    int num=l;
    while(i<=mid&&j<=r)
    {
        if(a[i]<=a[j])
        {
            c[num++]=a[i++];
        }
        else
        {
            c[num++]=a[j++];
            ans+=(ll)(mid-i+1);//(i~mid)范围内都是大于a[j]的
        }
    }
    while(i<=mid)
        c[num++]=a[i++];
    while(j<=r)
        c[num++]=a[j++];
    for(int k=l;k<=r;k++)
    {
        a[k]=c[k];
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    msort(1,n);
    printf("%lld\n",ans);
    return 0;
}
posted @   wlqtc  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示