题意:裸的最长上升子序列。
思路:传统的O(N^2)的DP没法过。
用O(NLOGN)的贪心方法过。
#include<iostream> using namespace std; const int N=100005; int n; int stack[N]; int sp; void insert(int t) { int head=1; int tail=sp-1; int mid; while(head<tail) { mid=(head+tail)/2; if(stack[mid]<t) { head=mid+1; } else { tail=mid; } } stack[head]=t; } int main() { while(scanf("%d",&n)!=EOF) { sp=1; int first; scanf("%d",&first); stack[sp++]=first; int in; for(int i=2;i<=n;i++) { scanf("%d",&in); if(in>stack[sp-1]) stack[sp++]=in; else { insert(in); } } printf("%d\n",sp-1); } return 0; }