poj2299 Ultra-QuickSort
来源:互联网 发布:华硕风扇控制软件 编辑:程序博客网 时间:2024/05/04 11:03
D - Ultra-QuickSort
Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescription
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
原来是超快速排序,我说用快排怎么不对。他要的是冒泡排序的简单说就是逆序对,用归并就可以。
#include <iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;int temp[500005];int a[500005];long long sum;void hebing(int *a,int first,int med,int last){ int cur =0,i=first,j=med+1; while(i<=med&&j<=last) { if(a[i]<=a[j]) { temp[cur++]=a[i++]; continue; } else { sum+=med-i+1; temp[cur++]=a[j++]; } } while(i<=med)temp[cur++]=a[i++]; while(j<=last)temp[cur++]=a[j++]; for(i=0; i<cur; i++)a[first++]=temp[i];}void gb(int *a,int first,int last){ if(first==last)return; int med=(first+last)/2; gb(a,first,med); gb(a,med+1,last); hebing(a,first,med,last);}int main(){ int n; int i; while(~scanf("%d",&n)) { if(!n)break; for(i = 0; i < n; ++i)scanf("%d",&a[i]); sum=0; gb(a,0,n-1); printf("%lld\n",sum); } return 0;}
1 0
- poj2299 Ultra-QuickSort
- (POJ2299)Ultra-QuickSort
- poj2299 Ultra-QuickSort
- poj2299 Ultra-QuickSort
- POJ2299-Ultra-QuickSort
- POJ2299:Ultra-QuickSort
- poj2299 Ultra-QuickSort
- poj2299 Ultra-QuickSort
- poj2299 Ultra-QuickSort
- poj2299--Ultra-QuickSort
- poj2299—Ultra-QuickSort
- POJ2299 Ultra-QuickSort
- POJ2299 Ultra-QuickSort
- poj2299 Ultra-QuickSort
- POJ2299 Ultra-QuickSort
- POJ2299 Ultra-QuickSort
- poj2299 Ultra-QuickSort
- poj2299 Ultra-QuickSort
- java正则表达式
- 2016 Multi-University Training Contest3
- 诸侯安置DP做法
- Qt Quick ToolTip
- POJ 2996 简单模拟
- poj2299 Ultra-QuickSort
- HTML学习03-HTML标题/HTML段落
- hdu 5754 多校第3场
- 【Android】使用Jenkins+Gradle+FTP,实现自动打包,自动上传文件至FTP
- 隐藏TabBar的方法
- spring-boot+mybatis动态sql
- opencv3.1 压缩并拼图
- 【SSH系列】一步步深入springmvc+商品列表查询demo
- leetcode 136. Single Number 复杂方法