public class LISEfficient {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //number of elements
int[] ar = new int[n]; //input elements
for (int i=0; i<n; i++) {
ar[i] = sc.nextInt();
}
System.out.println(lis2(ar)); //returns the size of LIS
}
static int lis2(int[] ar){
TreeSet<Integer> set = new TreeSet<Integer>();
for (int i=0; i<ar.length; i++) {
Integer ceil = set.ceiling(ar[i]);
if(ceil == null) //if ceil not present this simply extends the current sequence
set.add(ar[i]);
else{ //replace ceil with this value
set.remove(ceil);
set.add(ar[i]);
}
}
return set.size();
}
}