Pagini recente » Cod sursa (job #869141) | Cod sursa (job #2255031) | Cod sursa (job #3144872) | Cod sursa (job #1889418) | Cod sursa (job #726887)
Cod sursa(job #726887)
#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;
}