题目:
题解:
使用二分
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+10;
long long a[N],f[N];
int con;
int find(int x)
{
int l=1,r=con;
while(l<r)
{
int mid=l+r>>1;
if(f[mid]>=x) r=mid;
else l=mid+1;
}
return l;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
f[++con]=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]>f[con])
{
f[++con]=a[i];
}
else
{
int t=find(a[i]);
f[t]=a[i];
}
}
cout<<con<<endl;
return 0;
}