(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;
}
分类:
ACM / 数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现