# POJ 2299 Ultra-QuickSort

Ultra-QuickSort
 Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 50447 Accepted: 18499

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

5
9
1
0
5
4
3
1
2
3
0


Sample Output

6
0


Source

ac代码

#include <iostream>
using namespace std;

const int maxn=500000+5;
long long  ans=0;
long long  a[maxn],t[maxn];
void mergesort(int x,int y){

if(x==y) return ;

else {
int mid=(x+y)/2;

int mm=mid+1,xx=x,i=x;
mergesort(x,mid);
mergesort(mid+1,y);

while(xx<=mid && mm<=y){

if(a[xx]<=a[mm]) t[i++]=a[xx++];
else {
ans+=mid-xx+1;
t[i++]=a[mm++];
}
}

while(xx<=mid) t[i++]=a[xx++];
while(mm<=y)  t[i++]=a[mm++];

for(int i=x;i<=y;i++){
a[i]=t[i];
}
}

}
int  main(){

int n;
while(cin>>n &&n){

for(int i=0;i<n;i++){
cin>>a[i];
}
ans=0;
mergesort(0,n-1);
cout<<ans<<endl;
}
return 0;
}


• 本文已收录于以下专栏：

## Ultra-QuickSort POJ - 2299 （树状数组）

Ultra-QuickSort  POJ - 2299  树状数组模板题。 思路：看此篇博文之前，你要对树状数组有所了解，这里树状数组求的也是和，并且因为更新多次，所以不用树状数组减少复杂度的话 ...
• duan_1998
• 2017年02月22日 21:29
• 332

## POJ 2299 Ultra-QuickSort （树状数组）

• wdkirchhoff
• 2014年12月09日 22:16
• 1492

## 【Poj】-2299-Ultra-QuickSort（树状数组，离散化, 好）

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 55721 ...
• Bear1998
• 2016年08月19日 16:03
• 200

## poj 2299 Ultra-QuickSort 求逆序数，树状数组解法，详细解析

In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a seque...
• Lionel_D
• 2015年02月05日 20:55
• 1094

## poj - 2299 - Ultra-QuickSort（树状数组）

• SCNU_Jiechao
• 2014年01月25日 11:51
• 818

## 树状数组例题（poj2299）

• guhaiteng
• 2016年08月06日 22:07
• 1403

## Poj 2299 Ultra-QuickSort【逆序数】

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 51736 ...
• liuke19950717
• 2016年03月02日 16:31
• 180

## POJ 2299 Ultra-QuickSort

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 45088 ...
• sunnykema
• 2015年03月04日 21:43
• 165

## poj 2299 Ultra-QuickSort 题解

Description In this problem, you have to analyze a particular sorting algorithm. The algorithm pro...
• u013724185
• 2014年02月22日 13:23
• 824

## POJ 2299 Ultra-QuickSort

Ultra-QuickSort Description In this problem, you have to analyze a particular sorting algorithm. T...
• u014688855
• 2014年07月15日 16:32
• 593

举报原因： 您举报文章：POJ 2299 Ultra-QuickSort 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)