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) {
ar[i] = sc.nextInt();
}
System.out.println(lis2(ar)); //returns the size of LIS
}
static int lis2(int[] ar){
TreeSet set = new TreeSet();
for (int i=0; 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();
}
}