#include # define endl '\n' # define clr(x,a) memset(x,a,sizeof(x)) # define PI 3.14159265358979323846 # define vi vector # define fo(i,n) for(int i=1;i<=n;i++) # define all(a) a.begin(), a.end() # define deb(x) cout<<#x<<"=="<>t; while(t--) # define rev(s) reverse(s.begin(),s.end()) # define linija cout<<"____________\n"; using namespace std; typedef long long ll; const int mxN=100005, mod=1e9+7; int n, a[mxN], br; int tail[mxN]; int CeilIndex(int l, int r, int key){ while (r >= l) { int mid = l + (r - l) / 2; if (tail[mid] >= key) r = mid-1; else l = mid+1; } return r; } int LongestIncreasingSubsequenceLength(){ if (br==0) return 0; int length = 2; // always points empty slot in tail tail[1] = a[1]; for (int i = 2; i <= br; i++) { if (a[i] < tail[1]) tail[1] = a[i]; else if (a[i] > tail[length - 1]) tail[length++] = a[i]; else{ // cout<