Cod sursa(job #726887)

Utilizator Oancea.CatalinOancea Catalin Oancea.Catalin Data 27 martie 2012 16:33:53
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
#include<cstring>
using namespace std;
#define IN "inversiuni.in"
#define OUT "inversiuni.out"
#define MAX 5010  
fstream f(IN, ios::in), g(OUT, ios::out);
int A[MAX], B[MAX];  
long long mergesort(int start, int end)  
{   
    if (start==end)  
        return 0;  
    int mid=start+(end-start)/2;
    long long ret1=mergesort(start, mid), ret2=mergesort(mid+1, end), ret3=0;
    int i=start, j=mid+1, k=start;

    while(i<=mid && j<=end)
    {
        if (A[i]<A[j])
            B[k++]=A[i++];
        else
        {
            ret3+=(mid-i)+1;
            B[k++]=A[j++];
        }
    }
    while(i<=mid)
        B[k++]=A[i++];  
	
    while(j<=end)
        B[k++]=A[j++];
   
    memcpy(A+start,B+start,sizeof(A[0])*(end-start+1)); 
    return (ret1+ret2+ret3);
}  
int main()  
{  
    int i, n;
    while(f>>n)  
    {  
        for(i = 0; i < n; i++)
			f>>A[i];  
       g<<mergesort(0, n - 1)<<endl;    
    }  
    return 0;  
}