Ultra-QuickSort poj2299 (归并排序 求逆序数对)
来源:互联网 发布:网页在线客服软件 编辑:程序博客网 时间:2024/04/30 02:02
Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 57649 Accepted: 21298
Description
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Ultra-QuickSort produces the output
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
59105431230
Sample Output
60
///2299 MergeSort#include <iostream>#include <cstdio>using namespace std;const int maxn=500010;int num[maxn],temp[maxn];long long sum;void Merge(int low,int mid,int high){ int i=low; int j=mid+1; int cnt=1; ///cnt 多加了一个 while(i<=mid && j<=high) { if(num[i] < num[j]) ///防止相等的时候计算逆序对 { temp[cnt++]=num[i++]; } else { temp[cnt++]=num[j++]; sum+=mid+1-i; ///左边的元素比右边的大,那么左边剩下的没比完的元素和这个右边的元素都构成了逆序对 /// 12354 5和4 比较; 逆序对就是1 12543 5和4 然后就是12453 4和3 } } while(i<=mid) { temp[cnt++]=num[i++]; } while(j<=high) { temp[cnt++]=num[j++]; } for (i=1;i<cnt;i++) /// 从low开始复制回去 { num[low+i-1]=temp[i]; }}void msort(int low,int high){ int mid; if (low<high) { mid=(low+high)/2; msort(low,mid); msort(mid+1,high); Merge(low,mid,high); }}int main(){ int i,n; while(cin>>n && n) { sum=0; for(i=1; i<=n; i++) { scanf("%d",&num[i]); } msort(1,n); printf("%lld\n",sum); } return 0;}
1 0
- Ultra-QuickSort poj2299 (归并排序 求逆序数对)
- POJ2299 Ultra-QuickSort 归并排序求逆序数对
- (归并排序求逆序数) poj2299 Ultra-QuickSort
- POJ2299-Ultra-QuickSort (归并排序求逆序数)
- POJ2299 Ultra-QuickSort (归并排序求逆序数模板)
- POJ2299 Ultra-QuickSort(归并排序,求逆序数)
- POJ2299 Ultra-QuickSort 归并排序求逆序对
- poj2299(Ultra-QuickSort)求逆序对
- poj2299 Ultra-QuickSort&&NYOJ117 求逆序数 (树状数组求逆序对数+离散化)+(归并排序)
- POJ2299《Ultra-QuickSort》方法:归并排序找逆序数
- POJ2299 Ultra-QuickSort 归并排序和逆序数,树状数组
- POJ 2299 Ultra-QuickSort(归并排序求逆序数)
- 10810 - Ultra-QuickSort(归并排序求逆序数)
- 复习--Ultra-QuickSort(归并排序求逆序数)
- 2299 Poj Ultra-QuickSort(归并排序求逆序数)
- (POJ 2299)Ultra-QuickSort 归并排序求逆序数
- poj 2299 Ultra-QuickSort(归并排序求逆序对)
- poj2299 - Ultra-QuickSort (求逆序数)
- 【Unity】使用Git管理项目及其.gitignore
- Java配置环境变量及hello world
- c++ 数据结构 顺序栈的类定义
- 韦东山学习笔记
- Java集成thymeleaf视图层模板引擎构建web项目实例讲解(附项目源码)
- Ultra-QuickSort poj2299 (归并排序 求逆序数对)
- 459. Repeated Substring Pattern
- 使用C# DES解密java DES加密的字符串
- opencv addWeighted()函数
- PHP双重循环 -- 九九乘法表
- RTMP协议以及提取RTMP视频流组成H264视频文件
- Android开发之Bitmap二次采样
- PYTHON入门
- #define