#include<iostream> #include<algorithm> using namespace std; const int N=100010; int n; int a[N],q[N]; int main(void){ cin>>n; for(int i=0; i<n; i++)cin>>a[i]; int len=0; q[0]=-2e9; for(int i=0;i<n;i++){ int l=0,r=len; while(l<r){ int mid=l+r+1>>1; if(q[mid]<a[i])l=mid; else r=mid-1; } len=max(len,r+1); q[r+1]=a[i]; } cout<<len<<endl; return 0; }
最长上升子序列III--利用二分优化至nlogn
猜你喜欢
转载自www.cnblogs.com/programyang/p/11256478.html
今日推荐
周排行