Monday, April 18, 2011

11495 - Bubbles and Buckets


#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define M 100005

int num[M],snum[M],w;
void Merge(int low,int mid,int high);
void MergeSort(int low,int high);

int main()
{
    int n,i;
    //freopen("in.txt","r",stdin);

    while(scanf("%d",&n)&&n)
    {
        for(i=0;i<n;i++)
            scanf("%d",&num[i]);
        w=0;
        MergeSort(0,n-1);

        if(w&1)
            printf("Marcelo\n");
        else
            printf("Carlos\n");
    }
    return 0;
}

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);
    }
}

void Merge(int low,int mid,int high)
{
    int h,i,j,k;
    h=i=low,j=mid+1;

    while(h<=mid&&j<=high)
    {
        if(num[h]<=num[j])
        {
            snum[i++]=num[h++];
            w+=i-h;
        }
        else
        {
            snum[i++]=num[j++];
        }
    }
    if(h>mid)
        for(k=j;k<=high;k++)
            snum[i++]=num[k];
    else
        for(k=h;k<=mid;k++)
            snum[i++]=num[k],w+=i-k-1;

    for(k=low;k<=high;k++)
        num[k]=snum[k];
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.