HDU 1394
#include<bits/stdc++.h>
using namespace std;
int n,i,sum,ans;
int val[20010],tree[20010];
int query(int node,int L,int R,int l,int r){
if(l==L&&r==R)
return tree[node];
int mid=(L+R)/2;
if(r<=mid)return query(node*2,L,mid,l,r);
if(l>mid)return query(node*2+1,mid+1,R,l,r);
return query(node*2,L,mid,l,mid)+query(node*2+1,mid+1,R,mid+1,r);
}
void add(int node,int L,int R,int p){
tree[node]++;
if(L==R)return;
int mid=(L+R)/2;
if(p<=mid)add(node*2,L,mid,p);
else add(node*2+1,mid+1,R,p);
}
int main(){
while(scanf("%d",&n)!=EOF){
sum=0;
memset(tree,0,sizeof(tree));
for(i=1;i<=n;i++){
scanf("%d",&val[i]);
int last=sum;
sum+=query(1,1,n,val[i]+1,n);
add(1,1,n,val[i]+1);
}
ans=sum;
for(i=1;i<=n;i++){
sum=sum+n-2*val[i]-1;
ans=min(ans,sum);
}
printf("%d\n",ans);
}
return 0;
}