AcWing 896. 最长上升子序列 II
原题链接
中等
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int nn=1e5+7;
const int inf=0x3f3f3f3f;
int n;
int f[nn];
int a[nn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
int len=0;
f[0]=-inf;
for(int i=0;i<n;i++)
{
int l=0,r=len;
while(l<r)
{
int mid=l+r+1>>1;
if(f[mid]<a[i])//寻找最大的2小于a[i]的数//
l=mid;
else
r=mid-1;
}
len=max(len,r+1);
f[r+1]=a[i];//f[r]加了一个数,那么总长度更新为r+1//
}
cout<<len<<endl;
return 0;
}