//hdu 1394 Minimum Inversion Number(树状数组)
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
const int N=6000;
int c[N];
int n;
int num[N];
//=========树状数组======
int lowbit(int x)//核心
{
return x&(-x);
}
void add(int a)
{
while(a<=n)
{
c[a]++;
a+=lowbit(a);
}
}
int Sum(int a)
{
int sum=0;
while(a>0)
{
sum+=c[a];
a-=lowbit(a);
}
return sum;
}
//=======================
int main()
{
while(scanf("%d",&n)==1)
{
memset(c,0,sizeof(c));
int i,ans=0;
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
num[i]++;
ans+=Sum(n)-Sum(num[i]);
add(num[i]);
}
int min=ans;
for(i=0;i<n;i++)
{
ans+=(n-num[i])-(num[i]-1);//数列头部接到尾部,逆序的个数变化
if(ans<min) min=ans;
}
printf("%d\n",min);
}
return 0;
}