Ultra-QuickSort poj 2299 归并排序

来源:互联网 发布:橙光游戏制作软件 编辑:程序博客网 时间:2024/04/29 23:29
Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 35993 Accepted: 12965

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 < 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<cstring>#include<cstdio>using namespace std;int a[500000];int sw[500000];int n;long long num;void merge(int low,int mid,int high){     int i=low;     int j=mid+1;     int m=0;     while(i<=mid&&j<=high)     {         if(a[i]<=a[j])         {             sw[m++]=a[i];             i++;         }         else         {             sw[m++]=a[j];             j++;             num=num+mid-i+1;         }     }     while(i<=mid)     {         sw[m++]=a[i];         i++;     }      while(j<=mid)     {         sw[m++]=a[j];         j++;     }     for(i=0;i<m;i++)     {         a[low+i]=sw[i];     }}void mergesort(int low,int high){     if(low<high)     {         int mid=(low+high)/2;         mergesort(low,mid);         mergesort(mid+1,high);         merge(low,mid,high);     }}int main(){    int i,j;    int n;    while(scanf("%d",&n)!=EOF)    {     if(n==0)     break;     num=0;     for(i=0;i<n;i++)     scanf("%d",&a[i]);     mergesort(0,n-1);     cout<<num<<endl;    }    return 0;}


	
				
		
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为麦芒5主屏页面不显示怎么办 6s p换屏幕原装太贵怎么办 4g手机开不开机黑屏怎么办 华为麦芒5 4g信号差怎么办 华为麦芒手机锁屏密码忘了怎么办 华为麦芒5相机拍相片倒了怎么办 红米5a开不了机怎么办 华为沾了海水打不开机怎么办 华为麦芒手机忘记锁屏密码怎么办 华为手机的方框键摁不了怎么办 笔记本自动更新到一半太慢了怎么办 华为麦芒5音量下键乱跑了怎么办 麦芒6手机QQ视频没声音怎么办 18:9看16:9黑边怎么办 华为畅享7s声音小怎么办 华为畅享8手机声音小怎么办 华为畅享8plus声音小怎么办 荣耀7x锁屏密码忘记怎么办 华为荣耀7x锁屏密码忘记了怎么办 苹果耳机进水后声音变了怎么办 华为荣耀开了数据用不了怎么办 华为手机高德地图信号弱怎么办? 手机QQ浏览器看视频有广告怎么办 手机显示网络连接但不可上网怎么办 华为手机关机后开不了机怎么办 华为畅享8p相机拍照模糊怎么办 手机触屏不准怎么办荣耀青春版九 华为手机锁屏手势密码忘了怎么办 荣耀手机锁屏密码忘了怎么办 华为p20隐私空间密码忘了怎么办 安全管家隐私保护的密码忘了怎么办 华为手机自带截图键删除了怎么办 飞科电吹风吹一会就断电怎么办 住酒店时电吹风吹坏了怎么办 把话费充到停机的号码上去了怎么办 电信手机卡充值了还停机怎么办 电信手机一直没用却欠费了怎么办 苹果se开起4g信号不好怎么办 触屏华为手机充不了电怎么办 华为手机自拍出来的字反向怎么办 华为微信隐藏了怎么弄出来怎么办