
n = gets.to_i
a = []
n.times{|i| a[i] = gets.to_i }

def a.lis
  l = []
  self.each do |ai|
    next l << ai if l.empty?
    l[-1] >= ai ? l[l.bsearch_index{|x| x >= ai}]=ai : l.push(ai)
  end
  l.length
end

puts a.lis

