```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(reader, &n)
a := make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i])
}
stack := [][2]int{}
for i := 0; i < n; i++ {
h := a[i]
cnt := 1
for len(stack) > 0 && stack[len(stack)-1][0] > h {
top := stack[len(stack)-1]
stack = stack[:len(stack)-1]
if top[1]%2 == 1 {
h = top[0]
}
cnt += top[1]
}
if len(stack) > 0 && stack[len(stack)-1][0] == h {
stack[len(stack)-1][1] += cnt
} else {
stack = append(stack, [2]int{h, cnt})
}
}
if len(stack) == 1 {
fmt.Println("YES")
return
}
maxH := stack[len(stack)-1][0]
for i := 0; i < len(stack); i++ {
if stack[i][1]%2 == 1 && (maxH-stack[i][0])%2 != 0 {
fmt.Println("NO")
return
}
}
fmt.Println("YES")
}
```