poj 2299 (归并排序)
给定一个无序的数列,由32位整数组成的,序列长度可达500000,现在通过不断的两两交换,把这个序列排成由小到大的有序序列,问交换的次数是多少。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define NN 500005 4 5 int a[NN]; 6 __int64 count; 7 8 void Merge(int data[], int l, int m, int r) 9 { 10 int i = l; 11 int j = m + 1; 12 int k = 0; 13 int *pd; 14 pd = (int*)malloc((r-l+1) * sizeof(int));//归并 15 16 while (i<=m && j<=r) 17 { 18 if (data[i] <= data[j]) 19 { 20 pd[k++] = data[i++]; 21 } 22 else 23 { 24 pd[k++] = data[j++]; 25 count += m - i + 1; 26 } 27 } 28 while (i <= m) 29 { 30 pd[k++] = data[i++]; 31 } 32 while (j<=r) 33 { 34 pd[k++] = data[j++]; 35 } 36 for (i=l, k=0; i<=r; i++, k++) 37 { 38 data[i] = pd[k]; 39 } 40 free(pd); 41 //pd = NULL; 42 } 43 44 void MergeSort(int data[], int l, int r) 45 { 46 if (l < r) 47 { 48 int m= (l + r) / 2; 49 MergeSort(data, l, m); 50 MergeSort(data, m+1, r); 51 Merge(data, l, m, r); 52 } 53 } 54 55 int main(void) 56 { 57 int n; 58 //int i; 59 while (scanf("%d", &n), n) 60 { 61 count = 0; 62 for (int i=0; i<n; i++) 63 { 64 scanf("%d", &a[i]); 65 } 66 MergeSort(a, 0, n-1); 67 printf("%I64d\n", count); 68 } 69 return 0; 70 }
转载于:https://www.cnblogs.com/bucuo/archive/2012/11/15/2772157.html
poj 2299 (归并排序)相关推荐
- poj 2299 Ultra-QuickSort
http://poj.org/problem?id=2299 归并排序 代码: #include<iostream> #include<stdio.h> #include< ...
- POJ 2299 Ultra-QuickSort(线段树+离散化)
题目地址:POJ 2299 这题以前用归并排序做过.线段树加上离散化也能够做.一般线段树的话会超时. 这题的数字最大到10^10次方,显然太大,可是能够利用下标,下标总共仅仅有50w.能够从数字大的開 ...
- Ultra-QuickSort POJ 2299(归并排序)
http://acm.hust.edu.cn/vjudge/contest/124435#problem/D 题意:给出一个长度为n的数列,你每一次可以随意交换其中两个数字的位置.问你至少交换几次,才 ...
- POJ - 2299 Ultra-QuickSort(线段树+离散化/归并排序)
题目链接:点击查看 题目大意:给出n个数字,求使用冒泡排序所需要交换的次数 题目分析:这个题n给到了5e5,如果直接冒泡排序的话,的时间复杂度肯定就TLE了,所以不能直接暴力模拟 我们换个思路,这个题 ...
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...
- POJ 2299 Ultra-QuickSort(树状数组 + 离散)
链接:http://poj.org/problem?id=2299 题意:给出N个数组成的数列A(0 <= A[i] <= 999,999,999),求该数列逆序对的数量. 分析:题目所谓 ...
- zoj 2386 || poj 2299 Ultra-QuickSort
我晕 ,这个我没有写题解么..忘了.. 求逆序数... 白皮书上有,用的归并排序,今天又看了算导的归并排序,写了下,过了. 因为这个题在树状数组的分类下的,所以尝试用树状数组做.想了会... 因为数的 ...
- POJ 2299 Ultra-QuickSort(树状数组+离散化)
题目大意: 就是说,给你一个序列,然后让你求出这个序列有多少个逆序对,所谓逆序对就是对于这个序列中的元素有a[i]>a[j] 且i<j存在. 其实原题是这样说的,给你一个序列,让你用最少的 ...
- POJ 2299 - Ultra-QuickSort BIT
题意 给我们一个序列 序列长度小于500000 每个元素 小于999999999 让我们只移动相邻的元素 最终使得他们移动到正好上升序的最小移动次数 分析 我们看 最小的移动次数其实是个幌子 因为你移 ...
最新文章
- [Eclipse]GEF入门系列(六、添加菜单和工具条)
- sixth week:third work
- 我自己为我自己定制的文章模板
- please wait while windows configures microsoft visual studio professional 2013
- 蓟门边studio-码农创业路的起点
- SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口
- 文件共享存储主备实时热备实现方案
- Spring Cloud与微服务学习总结(5)——认证鉴权与API权限控制在微服务架构中的设计与实现(三)
- More Effective C++精简版(4)
- 《OpenGL编程指南》收藏的学习网址
- 夹水晶头8根网线的顺序
- html5 放风筝,北京最全的放风筝5大最佳地点,地广人稀,不用花钱
- mysql命令行备份数据库
- Unity Navigation烘焙路面与自动寻路
- 以“空城计”为例的项目管理执行方法论干货
- linux释放cpu命令,linux内存清理和释放命令
- R语言系列学习(各种检验)
- 七夕恋人必备表白源码
- 【通信】盖氏圆盘方法(GDE)计算均匀直线阵(ULA)中信号源个数附matlab代码
- 基于soap 的 python web services 服务开发指南
热门文章
- 理财平台频繁暴雷,羊毛党该要本金还是撸利息?
- 一个人到底申请几张信用卡最合适?
- 安卓PopupWindow
- 使用vivado进行逻辑开发时,进行到Generate Bitstream时报错
- Java字节码反编译工具
- leetcode跳跃游戏C语言,LeetCode:跳跃游戏
- 取pi的前8位的解压密码_两种方式实现取16位变量的高低8位, 不严谨对比
- docker always_Ubuntu+Docker+STF环境搭建
- java设置属性的取值范围是多少_jvm-Java系统属性的范围
- Tensor数据相关的运算、函数讲解及与numpy区别