51nod 最长单增子序列(LIS)

来源:互联网 发布:煤炭建设工程预算软件 编辑:程序博客网 时间:2024/06/06 19:22
输入

第1行:1个数N,N为序列的长度(2 <= N <= 50000)第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)

输出

输出最长递增子序列的长度。

输入示例

8516824510

输出示例

5

#include <iostream>  #include <algorithm>  #include <cstring>  using namespace std;  int f[50000];  int ac(int i,int j, int a)  {      while(i<=j)      {          int mid=(i+j)/2;          if(f[mid]==a)return mid;          else if(f[mid]<a)i=mid+1;          else j=mid-1;      }      return i;  }  int main()  {      int n;      cin>>n;      int a;      int max=0;      for(int i=0; i<n; i++)      {          cin>>a;          int j=ac(1,max,a);          f[j]=a;          if(j>max)max=j;      }      cout<<max<<endl;      return 0;  }  

0 0
原创粉丝点击