import java.util.Scanner

object Main extends App { 
  val sc = new Scanner(System.in)
  val N = sc.nextInt()
  val seq = (for (i <- 1 to N) yield sc.nextInt).toList

  class DP(n:Int, seq:List[Int]) {
    val Inf = Int.MaxValue >> 1
    val memo = Array.fill(n)(Inf)

    def find(x:Int):Int = {
      def iter(l:Int,r:Int):Int = {
        if (l+1==r || l==r) l
        else {
          val i = (l + r) >> 1
          (x - memo(i)) match {
            case d if d  < 0 => iter(l, i)
            case d if d == 0 => i
            case d if d  > 0 => iter(i, r)
          }
        }
      }
      iter(0, n-1)
    }

    def solver():Int = {
      for (e <- seq) {
        val i = find(e)
        if (memo(i) < e) memo(i+1) = e else memo(i) = e
      }
      memo.filter(_!=Inf).length
    }
  }

  val dp = new DP(N, seq)

  println(dp.solver())
}
