package main
import (
"fmt"
// "bufio"
// "os"
// "strings"
)
// 求最少出队人数,也就是求最多留队人数,计算每个人左边和右边最多站几个人,就可以得到哪个人的左边+右边最大,再加上自己,就是最多可以站下的人数
func main() {
// 学生数量和身高数据
var count int
// var inputText string
fmt.Scan(&count)
// reader := bufio.NewReader(os.Stdin)
// inputText, _ = reader.ReadString('\n')
// inputText = strings.TrimSpace(inputText)
// inputText = strings.TrimSuffix(inputText, "\n")
// heightSlice := strings.Split(inputText, " ")
// 好苦呀,为什么上面这种处理方式,执行结果是错的呀。。。。。。。。。。
heightSlice := make([]int, count)
for {
for i := 0; i < count; i++ {
fmt.Scan(&heightSlice[i])
}
break
}
leftSlice := make([]int, count)
// 以每个人为中心,计算他左边最多站几个人
for i := 1; i < count; i++ {
// 循环当前人左边所有人,所以是j<i;
for j := 0; j < i; j++ {
// 如果当前人身高大于左边某个人,并且当前人循环至此时 他的左边最大人数 小于 j的。那要替换i的数量
if heightSlice[i] > heightSlice[j] && leftSlice[i] < leftSlice[j] + 1 {
// 符合条件,当前人左边最大人数,就是i的左边最大人数
leftSlice[i] = leftSlice[j] + 1
}
}
}
rightSlice := make([]int, count)
// 以每个人为中心,计算他右边边最多站几个人
for i := count-2; i >= 0; i-- {
for j := count-1; j > i; j-- {
if heightSlice[i] > heightSlice[j] && rightSlice[i] < rightSlice[j] + 1 {
rightSlice[i] = rightSlice[j] + 1
}
}
}
max := 0
for i := 0; i < count; i++ {
if (leftSlice[i] + rightSlice[i] + 1) > max {
max = leftSlice[i] + rightSlice[i] + 1
}
}
fmt.Println(count - max)
}