POJ 2533 Longest Ordered Subsequence LIS O(n*log(n))
最长上升子序列O(n*log(n))的做法,只能用于求长度不能求序列。
#include <iostream> #include <algorithm> using namespace std; const int N=50050; int s[N],x; int main() { int n; while(cin>>n){ int top=0; for(int i=0;i<n;i++){ cin>>x; if(top==0||s[top-1]<x) s[top++]=x; else s[upper_bound(s,s+top,x)-s]=x; } cout<<top<<endl; } return 0; }