#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 1000000 + 10
using namespace std;
struct node{
long long int vel;
int pos;
}a[maxn];
int c[maxn];
int b[maxn];
int n;
int cmp(node a, node b)
{
return a.vel < b.vel;
}
int lowbit(int x)
{
return x&(-x);
}
void update(int m,int d)
{
while(m<=n)
{
c[m] += d;
m+=lowbit(m);
}
}
int getsum( int m)
{
int sum = 0;
while( m > 0 )
{
sum += c[m];
m -= lowbit(m);
}
return sum;
}
int main()
{
while(scanf("%d",&n) != EOF && n != 0)
{
long long int ans = 0;
memset(c,0,sizeof(c));
memset(b,0,sizeof(b));
for( int i = 1; i <= n ; i++)
{
scanf("%lld",&a[i].vel);
a[i].pos = i;
}
sort(a+1,a+n+1,cmp);
for( int i = 1; i<= n; i++)
b[a[i].pos] = i;
for( int i = 1; i<= n; i++)
{
update(b[i],1); //更新所存入点的树桩位置
ans += i - getsum(b[i]);//i代表所插入点的个数,getsum(b[i])得到的是b[i]之前插入的比b[i]小的点的个数
}
cout<<ans<<endl;
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 1000000 + 10
using namespace std;
struct node{
long long int vel;
int pos;
}a[maxn];
int c[maxn];
int b[maxn];
int n;
int cmp(node a, node b)
{
return a.vel < b.vel;
}
int lowbit(int x)
{
return x&(-x);
}
void update(int m,int d)
{
while(m<=n)
{
c[m] += d;
m+=lowbit(m);
}
}
int getsum( int m)
{
int sum = 0;
while( m > 0 )
{
sum += c[m];
m -= lowbit(m);
}
return sum;
}
int main()
{
while(scanf("%d",&n) != EOF && n != 0)
{
long long int ans = 0;
memset(c,0,sizeof(c));
memset(b,0,sizeof(b));
for( int i = 1; i <= n ; i++)
{
scanf("%lld",&a[i].vel);
a[i].pos = i;
}
sort(a+1,a+n+1,cmp);
for( int i = 1; i<= n; i++)
b[a[i].pos] = i;
for( int i = 1; i<= n; i++)
{
update(b[i],1); //更新所存入点的树桩位置
ans += i - getsum(b[i]);//i代表所插入点的个数,getsum(b[i])得到的是b[i]之前插入的比b[i]小的点的个数
}
cout<<ans<<endl;
}
return 0;
}