#include<bits/stdc++.h>
using namespace std;
const int N=5e4+10;
int len[N],num[N];
int n;
int mysearch(int len[],int length,int x)
{
int l=1;
int r=length;
while(l<r)
{
int mid=(l+r)/2;
if(len[mid]>x)
{
r=mid;
}
else
{
l=mid+1;
}
}
return r;
}
int getlen(int n)
{
len[1]=num[0];
int ind=1;
for(int i=1;i<n;i++)
{
if(num[i]>len[ind])
len[++ind]=num[i];
else
{
int x=mysearch(len,ind,num[i]);
len[x]=num[i];
}
}
return ind;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>num[i];
int len=getlen(n);
cout<<len<<endl;
return 0;
}
二分优化的lis
最新推荐文章于 2022-02-18 12:36:53 发布