#include <iostream>
#include <assert.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define forn(i,n) for(int i=0;i<(int)n;++i)
#define fort(i,n) for(int i=0;i<=(int)n;++i)
#define fori(i,a,n) for(int i=a;i<(int)n;++i)
#define forit(i,a,n) for(int i=a;i<=(int)n;++i)
#define DBG(a) cerr<<#a<<" = "<<(a)<<endl
#define DBGA(a) cerr<<#a<<" = "<<(a)<<", ";
#define DBG2(a,b) do{DBGA(a)DBG(b);}while(0)
#define DBG3(a,b,c) do{DBGA(a)DBGA(b)DBG(c);}while(0)
#define DBG4(a,b,c,d) do{DBGA(a)DBGA(b)DBGA(c)DBG(d);}while(0)
#define ALL(v) v.begin(),v.end()
#define SZ(v) (int)v.size()
using namespace std;
template<typename T>
ostream &operator<<(ostream &os, vector<T> v){
os<<"[";
forn(i,SZ(v)){
if(i) os<<", ";
os<<v[i];
}
os<<"]";
return os;
}
template<typename T>
using PQ = priority_queue<T>;
typedef long long ll;
const int INF = 1000000000;
struct ST{
int n;
vector<int> st;
ST(int _n){
n=1<<(32-__builtin_clz(_n-1));
st.resize(2*n+1);
}
void update(int i){
i+=n-1;
st[i] += 1;
while(i){
i=(i-1)/2;
st[i]=st[2*i+1]+st[2*i+2];
}
}
int query(int ql, int qr, int l, int r, int i){
if(l>=qr||r<=ql) return 0;
if(l>=ql&&r<=qr) return st[i];
int m=(l+r)/2;
return query(ql,qr,l,m,2*i+1)+query(ql,qr,m,r,2*i+2);
}
int query(int l, int r){
return query(l,r,0,n,0);
}
};
void solve(){
int n;
cin>>n;
vector<int> a(n), p(n);
forn(i,n){
cin>>a[i];
p[--a[i]] = i;
}
vector<int> dp(n+1,INF);
dp[0] = 0;
forn(x,n){ // hay x elementos colocados, hay que colocar el elemento x
//~ DBG2(x, dp[x]);
int cnt = dp[x];
ST photo(n);
ST stand(n);
forn(i,x) stand.update(p[i]);
for(int i=x;i<n;++i){ // quiero colocar a x en la posicion i
cnt += p[i]-stand.query(0,p[i]);
cnt -= photo.query(p[i],n);
//~ DBG3(i,dp[x],cnt);
dp[i+1] = min(dp[i+1],cnt);
photo.update(p[i]);
}
}
cout<<dp[n]<<"\n";
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
#ifdef LOCAL
freopen("C.in", "r", stdin);
int tcs;
cin>>tcs;
while(tcs--)
#endif
solve();
return 0;
}