#include<iostream>
using namespace std;
const int maxn=
1000000;
int n,j,a[maxn],c[maxn],len;
int find(
int l,
int r,
int x)
{
if(l==r)
return l;
int mid=(l+r)>>
1;
if(c[mid]<x)
return find(mid+
1,len,x);
else return find(l,mid,x);
}
int main()
{
cin>>n;
for(
int i=
1;i<=n;i++)
cin>>a[i];
len=
1;c[
1]=a[
1];
for(
int i=
1;i<=n;i++)
{
if(a[i]>c[len]) j=++len;
else j=find(
1,len,a[i]);
c[j]=a[i];
}
cout<<len;
return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=
100010;
int n,tot,a[maxn],f[maxn],c[maxn];
int main()
{
scanf(
"%d",&n);
for(
int i=
1;i<=n;i++)
scanf(
"%d",&a[i]);
for(
int i=
1;i<=n;i++)
{
if(a[i]>c[tot])
{
c[++tot]=a[i];
f[i]=tot;
}
else
{
int pos=upper_bound(c+
1,c+tot+
1,a[i])-c;
c[pos]=a[i];f[i]=pos;
}
}
printf(
"%d",tot);
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1312514.html