题目链接:http://hihocoder.com/problemset/problem/1684
#include <bits/stdc++.h>
using namespace std;
using ll = long long ;
using ld = long double ;
#define ALL(X) begin(X), end(X)
#define mp make_pair
#define SZ(X) ((int)X.size())
const int N = 100000 + 7, INF = 0x3f3f3f3f;
int main()
{
std::ios::sync_with_stdio(false), cin.tie(0);
int n;
cin >> n;
vector<int>dp(n,INF), a(n);
for(int i = 0;i < n;i ++) cin >> a[i];
reverse(ALL(a));
for(int i = 0;i < n;i ++) *lower_bound(ALL(dp), a[i]) = a[i];
cout << n-(lower_bound(ALL(dp), INF) - begin(dp)) << endl;
return 0;
}