分治递归逆序数_[模板] 归并排序 逆序数 分治
归并排序
图来自维基
递归调用的过程需要在脑中模拟清楚
然后是代码的细节问题
多复习多理解
刘汝佳版
#include
using namespace std;
const int MAXN = 1e5 + 10;
int ans = 0;
int arr[MAXN] = {0};
int brr[MAXN] = {0};
void mergesort(int *arr, int fst, int lst, int *brr)
{
if(lst - fst > 1)
{
int mid = fst + (lst - fst) / 2;
int p = fst, q = mid, i = fst;
mergesort(arr, fst, mid, brr);
mergesort(arr, mid, lst, brr);
while(p < mid || q < lst)
{
if(q >= lst || (p < mid && arr[p] <= arr[q]))
{
brr[i++] = arr[p++];
}
else
{
brr[i++] = arr[q++];
ans += mid - p;
}
}
for(i = fst; i < lst; i++)
arr[i] = brr[i];
}
}
int main()
{
int n;
cin>>n;
for(int i = 0; i < n; i++)
cin>>arr[i];
mergesort(arr, 0, n, brr);
//for(int i = 0; i < n; i++)
//cout<
cout<
return 0;
}
//正月点灯笼版
#include
using namespace std;
long long ans = 0; //声明逆序数
void merge(int a[], int L, int M, int R)
{
int leftlen = M - L;
int rightlen = R - M + 1;
int left[leftlen];
int right[rightlen];
int i , j , k;
for(i = L; i < M; i++)
{
left[i - L] = a[i];
}
for(i = M; i <= R; i++)
{
right[i - M] = a[i];
}
i = 0; j = 0; k = L;
while(i < leftlen && j < rightlen)
{
if(left[i] < right[j])
{
a[k++] = left[i++];
}
else
{
a[k++] = right[j++];
ans += leftlen - i; //求逆序数
}
}
while(i < leftlen)
{
a[k++] = left[i++];
}
while(j < rightlen)
{
a[k++] = right[j++];
}
}
void merge_sort(int a[], int L, int R)
{
if(L == R)
return ;
else
{
int M = (R + L) / 2;
merge_sort(a, L, M); //递归分解左侧
merge_sort(a, M + 1, R); //递归分解右侧
merge(a,L,M + 1,R); //合并
}
}
int main()
{
ios::sync_with_stdio(false);
int a[50010];
int n;
cin>>n;
for(int i = 0; i < n; i++)
cin>>a[i];
merge_sort(a,0,n - 1);
for(int i = 0; i < n; i++)
{
cout<
}
cout<
cout<
return 0;
}
分治递归逆序数_[模板] 归并排序 逆序数 分治相关推荐
- java百度地图逆地址解析_百度地图逆地址解析
什么是Geocoding? Geocoding API 是一类简单的HTTP接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# .C++.Java等开发语言发送HTTP ...
- 【排序】归并类排序—归并排序(逆序数问题)
文章目录 前言 归并排序(merge sort) 逆序数 结语 微信公众号:bigsai 数据结构与算法专栏 前言 在排序中,我们可能大部分更熟悉冒泡排序.快排之类.对归并排序可能比较陌生.然而事实上 ...
- -9 逆序输出一个整数的各位数字_逆序对个数(归并排序)
题目描述 输入 N 组数据,对每组数据输出逆序对个数. 输入 对于每组测试用例,第一行输入此组数据元素个数 x,接下来 x 行,每行一个数,表示元素.(1≤x≤500000)(1≤x≤500000) ...
- python输入一个三位数、输出它的逆序数_从键盘任意输入一个3位整数
从键盘任意输入一个3位整数,编程计算并输出它的逆序数 程序哪里错了??为什么输出的是一个长长的负数 编写程序,输入一个3位正整数, www.zhiqu.org 时间: 2020-11-24 # ...
- 分治算法,逆序对,三维偏序与CDQ分治
分治算法基本思想 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出. 对于这类问题,我们往往先把它分解成几个子问题,找到求出 ...
- 逆序对个数(归并排序)
数对 (归并排序) 题目链接:https://ac.nowcoder.com/acm/contest/27274/H 来源:牛客网 Problem Description 链接:https://ac. ...
- python将字符串逆序_为什么说Python是一门伟大的入门语言?(附免费教程)
Python 是一门伟大的入门语言.作为一门伟大的编程语言,一定要具备一些特征,其中有五项特征是非常重要的: 非常棒的首次体验:就像书的开始,首先一定要能够"沉迷",学习新知识一定 ...
- 信息学奥赛一本通 1311:【例2.5】求逆序对 | 1237:求排列的逆序数 | OpenJudge NOI 2.4 7622:求排列的逆序数 | 洛谷 P1908 逆序对
[题目链接] ybt 1311:[例2.5]求逆序对 ybt 1237:求排列的逆序数 OpenJudge NOI 2.4 7622:求排列的逆序数 洛谷 P1908 逆序对 ybt 1311,123 ...
- AcWing 788 逆序对的数量-归并排序
给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j] ,则其为一个逆序对:否则不 ...
最新文章
- 服务器端物理实现(二)
- pytorch维度统计
- 括号匹配算法 java_使用栈实现括号匹配算法-java
- shardingsphere启动的时候报错Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required
- 【BUG记录】Matisse显示的图片乱序或者在全部项不显示
- linux文件名过长无法删除,不能删除文件,出现“源文件名长度大于系统支持的长度...
- 中国湖北区域汉至现代行政区划GIS数据
- 毕业论文格式修改方法
- 软件推荐:Picasa
- Windows10本地数据库搭建(MySQL、PostgreSQL)
- 全平台视频转GIF软件对比与推荐(iOS/安卓/Windows/Mac)
- android 下载apk后如何安装程序,Android下载并安装APK
- LabVIEW编程LabVIEW开发研华PCI 1756例程与相关资料
- OBD柴油货车环保在线检测终端助力机动车尾气监管与时俱进
- 中国撸串指北:13万家烧烤店的吃货最爱
- 南邮80c51汇编语言编程实验,实验三 查表 多分支(80C51单片机汇编语言编程)
- PPM,PGM图片格式
- 利用Prometheus(普罗米修斯)Grafana对机器群的运行时各项数据进行监控
- 骄傲狮子座的感情世界(图
- 史上最全!国内外最新免费3D模型下载网站分享!
热门文章
- hdu2561 第二小整数(排序)
- 如何设置电脑自动登录系统?不用输入用户名和密码
- 题目1176:树查找
- Python入门学习笔记03(装饰器)
- Oracle存储过程和存储函数创建
- glusterfs快速安装
- at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:)
- 要看懂MATLAB的Help需要积累的英文词汇!
- ASCII码表完整版
- IBM WebSphere Application Server 诊断和调优