简单二分(lower_bound()函数)
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define N 100000
const int inf = 1000000;
int a[N+10], g[N+10], n, ans;
void slove()
{
for(int i = 0; i < n; i++) g[i] = inf;
for(int i = 0; i < n; i++)
{
int d = lower_bound(g, g+n, a[i])-g;
if(g[d] == inf) ans++;
g[d] = a[i];
}
return ;
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
ans = 0;
slove();
cout << ans << endl;
return 0;
}