#include<iostream>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;
long long int arr[500010],swaps;
void marge(long long l,long long m ,long long r)
{
long long i,j,k;
long long n1=m-l+1;
long long n2=r-m;
long long L[n1],R[n2];
for(i=0;i<n1;i++)
{
L[i]=arr[l+i];
}
for(j=0;j<n2;j++)
{
R[j]=arr[m+1+j];
}
i=0;j=0;k=l;
while(i<n1 && j<n2)
{
if(L[i]<=R[j])
{
arr[k]=L[i];
i++;
}
else
{
arr[k]=R[j];
j++;
swaps += n1 - i;
}
k++;
}
while(i<n1)
{
arr[k]=L[i];
i++;
k++;
}
while(j<n2)
{
arr[k]=R[j];
j++;
k++;
}
}
void mergeSort(long long int l,long long r)
{
if(l<r)
{
long long m=l+(r-l)/2;
mergeSort(l, m);
mergeSort(m+1, r);
marge(l, m, r);
}
}
main()
{
long long n,i;
while(~scanf("%lld",&n))
{
swaps=0;
if(n==0)
break;
for(i=0;i<n;i++)
{
scanf("%lld",&arr[i]);
}
mergeSort(0,n-1);
cout<<swaps<<endl;
}
}
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;
long long int arr[500010],swaps;
void marge(long long l,long long m ,long long r)
{
long long i,j,k;
long long n1=m-l+1;
long long n2=r-m;
long long L[n1],R[n2];
for(i=0;i<n1;i++)
{
L[i]=arr[l+i];
}
for(j=0;j<n2;j++)
{
R[j]=arr[m+1+j];
}
i=0;j=0;k=l;
while(i<n1 && j<n2)
{
if(L[i]<=R[j])
{
arr[k]=L[i];
i++;
}
else
{
arr[k]=R[j];
j++;
swaps += n1 - i;
}
k++;
}
while(i<n1)
{
arr[k]=L[i];
i++;
k++;
}
while(j<n2)
{
arr[k]=R[j];
j++;
k++;
}
}
void mergeSort(long long int l,long long r)
{
if(l<r)
{
long long m=l+(r-l)/2;
mergeSort(l, m);
mergeSort(m+1, r);
marge(l, m, r);
}
}
main()
{
long long n,i;
while(~scanf("%lld",&n))
{
swaps=0;
if(n==0)
break;
for(i=0;i<n;i++)
{
scanf("%lld",&arr[i]);
}
mergeSort(0,n-1);
cout<<swaps<<endl;
}
}
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন