Ultra-QuickSort(离散化+树状数组求逆序数)

来源:互联网 发布:类似淘宝的交易平台 编辑:程序博客网 时间:2024/05/22 06:57

Link:http://poj.org/problem?id=2299



Ultra-QuickSort
Time Limit: 7000MS Memory Limit: 65536KTotal Submissions: 44681 Accepted: 16243

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

Source

Waterloo local 2005.02.05

[Submit]   [Go Back]   [Status]   [Discuss]



AC代码:

#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;struct node{int ord;int v;}a[500001];int n,c[500001],aa[500001];int lowbit(int p){return p&(-p);}int sum(int p){int s=0;while(p>0){s+=c[p];p-=lowbit(p);}return s;}void update(int p,int n,int k){while(p<=n){c[p]+=k;p+=lowbit(p);}}bool cmp(node a,node b){return a.v<b.v;}int main(){__int64 ans;while(scanf("%d",&n)&&n){memset(aa,0,sizeof(aa));memset(c,0,sizeof(c));for(int i=1;i<=n;i++){scanf("%d",&a[i].v);a[i].ord=i;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++){aa[a[i].ord]=i;}ans=0;for(int i=1;i<=n;i++){update(aa[i],n,1);ans+=(i-sum(aa[i]));}printf("%I64d\n",ans);}return 0;}



0 0
原创粉丝点击