BIT2014级软件学院程序设计-15 Ultra-QuickSort
来源:互联网 发布:手机淘宝寄快递在哪里 编辑:程序博客网 时间:2024/06/05 17:35
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.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n <= 100,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
5
9
1
0
5
4
3
1
2
3
0
Sample Output
6
0
Notice
The answer may be very large. You can use "long long" to store the answer and "%lld" to print it.
用归并排序做很简单。当然也可以用树状数组来做。
我是用的归并
#include <stdio.h>#include <string.h>int N, A[500010], T[500010];long long ans;void Merg_Sort(int x,int y){ if(y-x<=1) return; int mid;mid = x + (y-x)/2; Merg_Sort(x,mid); Merg_Sort(mid,y); int p = x, q = mid, i=x; while(p<mid || q<y) { if(q>=y || (p<mid && A[p] <= A[q])) T[i++] = A[p++]; else//else的条件是(p==mid || A[q] < A[p]) { if(p<mid)ans+=(mid-p);//由于是p<mid,所以此时也就是相当于 A[q] < A[p] T[i++] = A[q++]; //上面同时A[p]是第一个<A[q]的数,所以+后面还有的数(mid-p) } } for(i=x;i<y;i++) { A[i] = T[i]; }}int main(){ while(scanf("%d", &N) && N) { int i;memset(A,0,sizeof(A));memset(T,0,sizeof(T)); for(i=0;i<N;i++) { scanf("%d", &A[i]); } ans = 0; Merg_Sort(0,N); printf("%lld\n",ans);//结果会超int32 } return 0;}
- BIT2014级软件学院程序设计-15 Ultra-QuickSort
- BIT2014级软件学院程序设计-08传送带
- BIT2014级软件学院程序设计-11 条形码
- BIT2014级软件学院程序设计-16 魔方
- BIT2014级软件学院程序设计-17 迷宫
- BIT2014级软件学院程序设计-01球体问题
- BIT2014级软件学院程序设计-02进制转换
- BIT2014级软件学院程序设计-03 Flip Game
- BIT2014级软件学院程序设计-04合并果子
- BIT2014级软件学院程序设计-05 修剪草坪
- BIT2014级软件学院程序设计-06贪婪的你
- BIT2014级软件学院程序设计-07 Crossing River
- BIT2014级软件学院程序设计-09 Easier Done Than Said
- BIT2014级软件学院程序设计-10 ⑨的统计
- BIT2014级软件学院程序设计-12 编程珠玑
- BIT2014级软件学院程序设计-13 平面上的邮局
- BIT2014级软件学院程序设计-14 比赛记分问题
- BIT2014级软件学院程序设计-18 A Knight's Journey
- [疯狂Java笔记]AWT:BoxLayout盒式布局、Box容器
- Java中的main()方法详解
- java生成二维码到页面、到本地
- OpenWrt目录结构简介
- Android应用开发中模拟按HOME键效果
- BIT2014级软件学院程序设计-15 Ultra-QuickSort
- Android demo--调用系统相机拍照并显示图片为黑白
- Objective-C Class 、 MetaClass、实例 详解
- *将第一行中含有第二行中“23”的数输出并排序
- 《第一行代码》笔记
- VBA教程初级(三):变量的声明与作用域
- QGis二次开发基础 -- 根据属性查询要素
- Android框架之网络通信Volley
- Wiseteam 12核工作站GE180 仅29900元