#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define M 500005
unsigned long long w;
int num[M],snum[M];
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);
printf("%llu\n",w);
}
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];
}
#include<cstdio>
#include<algorithm>
using namespace std;
#define M 500005
unsigned long long w;
int num[M],snum[M];
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);
printf("%llu\n",w);
}
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.