n = gets.chomp.to_i
ary = gets.chomp.split().map(&:to_i)

def is_not_exist_plus_diff? m1,m2,p_ary
  x = p_ary.find{|p_idx| p_idx > m1}
  y = p_ary.find{|p_idx| p_idx < m2}
  x > y
rescue
  # findできない場合は、diffが-1,-1,2や2,-1,-1などngなパターンのみ。
  true
end

diff_ary = (ary.size - 1).times.map.with_index {|i,idx| [ary[i+1] - ary[i],idx]}
if diff_ary.any?{|diff| diff.first < -1}
  puts "No"
else
  # 最初のifで-2以下のdiffは無くなっている。
  m_a = minus_diff_ary_idx = diff_ary.select{|diff| diff.first == -1}.map(&:last)
  p_a = plus_diff_ary_idx = diff_ary.select{|diff| diff.first > 0}.map(&:last)
  if m_a.size == 0 || n == 1
    puts "Yes"
  elsif (m_a.size - 1).times.any? do |i|
      is_not_exist_plus_diff?(m_a[i],m_a[i+1],p_a)
    end
    puts "No"
  else
    puts "Yes"
  end
end