#include<iostream>
using namespace std;
const int N = 105;
int dp[N][2],a[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
dp[1][1] = dp[1][0] = 1;
for (int i = 2; i <= n; i++)
{
for (int j = 1; j < i; j++)
{
if (a[i] > a[j]) dp[i][0] = max(dp[j][0] + 1,dp[i][0]);
else if (a[i] < a[j]) dp[i][1] = max(max(dp[j][1] + 1,dp[j][0]+1), dp[i][1]);
else dp[i][1] = max(max(dp[j][0],dp[j][1]),dp[i][1]), dp[i][0] = max(dp[j][0],dp[i][0]);
}
}
int ans = 0x3f3f3f3f;
for(int i=1;i<=n;i++) ans=min(ans,n - max(dp[i][1], dp[i][0]));
cout << ans;
return 0;
}
dp[i][0]代表到达第i个时序列正在上升最多能排的人数,dp[i][1]代表已经经历过上升后正在下降最多能排的人数,if (a[i] > a[j]) dp[i][0] = max(dp[j][0] + 1,dp[i][0]);就是还在上升,else if (a[i] < a[j]) dp[i][1] = max(max(dp[j][1] + 1,dp[j][0]+1), dp[i][1]);从已经上升完正在下降转移,或者从还在上升,到达顶点后下降转移,else dp[i][1] = max(max(dp[j][0],dp[j][1]),dp[i][1]), dp[i][0] = max(dp[j][0],dp[i][0]);如果相等的话就和前面人数一样大