#include <bits/stdc++.h>
#define fio ios_base::sync_with_stdio(0);cin.tie(0);
#define ll long long
#define pb push_back
#define fi first
#define se second
#define en exit(0);
using namespace std;
const int N = 5005;
const int INF = 1e9 + 5;
int a[N], dp[N], inv[N][N], to_front[N][N];
// dp[i] - min number of swaps to have [1;i] satisfy the condition and consist of numbers in [1;i]
// inv[a][b] - the number of reverse inversions of only the numbers [a;b]
// to_front[a][b] - the number of numbers > b in front of numbers in [a;b]
int main()
{
fio
// ifstream cin("in.in");
int n;
cin >> n;
for(int i = 1;i <= n;i++)
cin >> a[i];
// calculate inv[a][b]
for(int i = 1;i <= n;i++)
for(int j = i + 1;j <= n;j++)
if(a[i] < a[j])
inv[a[i]][a[j]]++;
for(int i = 1;i <= n;i++)
for(int j = i + 1;j <= n;j++)
inv[i][j] += inv[i][j - 1];
for(int i = 1;i <= n;i++)
for(int j = i - 1;j >= 1;j--)
inv[j][i] += inv[j + 1][i];
// calculate to_front[a][b]
for(int i = 1;i <= n;i++)
for(int j = i + 1;j <= n;j++)
if(a[i] > a[j])
to_front[a[j]][a[i] - 1]++;
for(int i = 1;i <= n;i++)
for(int j = n - 1;j >= i;j--)
to_front[i][j] += to_front[i][j + 1];
for(int i = 1;i <= n;i++)
for(int j = i - 1;j >= 1;j--)
to_front[j][i] += to_front[j + 1][i];
// calculate dp[i]
for(int i = 1;i <= n;i++)
dp[i] = INF;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= i;j++)
dp[i] = min(dp[i], dp[j - 1] + to_front[j][i] + inv[j][i]);
cout << dp[n];
return 0;
}