Problem Statement
Solution :
This is a counting inversion problem.An inversion occurs when i < j and A[i] > A[j] where A is a list of numbers.
Algorithm to count inversion
combine use merge-and-count. Suppose the two lists are A, B. They are already sorted. Produce an output list L from A, B while also counting the number of inversions, (a,b) where a is-in A, b is-in B and a > b.
Here is the C++ implementation of the problem.
Related UVA Problems:
Solution :
This is a counting inversion problem.An inversion occurs when i < j and A[i] > A[j] where A is a list of numbers.
Algorithm to count inversion
Use divide and conquer
divide: size of sequence n to two lists
of size n/2
conquer: count recursively two lists
combine: this is a trick part (to do it in linear time)
conquer: count recursively two lists
combine: this is a trick part (to do it in linear time)
combine use merge-and-count. Suppose the two lists are A, B. They are already sorted. Produce an output list L from A, B while also counting the number of inversions, (a,b) where a is-in A, b is-in B and a > b.
These algorithm is close enough to Merge sort. Using merge sort this problem can be solved easily.
Here is the C++ implementation of the problem.
#include <stdio.h> #define sz 500000 #define inf 1000000000 long a[sz+2],cnt,L[sz+2],R[sz+2]; void merge(long p,long q,long r){ long i,j,k,ind1,ind2; for(i = p,ind1 = 1;i <= q;i++){ L[ind1++] = a[i]; } L[ind1] = inf; for(i = q+1, ind2 = 1;i <= r;i++){ R[ind2++] = a[i]; } R[ind2] = inf; i = j = 1; for(k = p;k <= r;k++){ if( L[i] > R[j] ){ cnt += ind1 - i; a[k] = R[j]; j++; } else{ a[k] = L[i]; i++; } } } void mergeSort(long p,long r){ if( p < r){ long q = (p+r)/2; mergeSort(p,q); mergeSort(q+1,r); merge(p,q,r); } } int main(){ long i,n; while(scanf("%ld",&n)&&n){ for( i = 1; i <= n; i++){ scanf("%ld",&a[i]); } cnt = 0; mergeSort(1,n); if(cnt&1) printf("Marcelo\n"); else printf("Carlos\n"); } return 0; }
Related UVA Problems:
299 | Train Swapping | ||
10327 | Flip Sort | ||
10810 | Ultra Quicksort | Solution | |
11495 | Bubbles and Buckets |
No comments:
Post a Comment