51nod 动态数组基础教程 5

来源:互联网 发布:维戈 莫特森 知乎 编辑:程序博客网 时间:2024/06/14 02:29

点击打开链接


输入

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

输出

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

输入示例

8516824510

输出示例

5

ps:  要弄懂二分法的。

#include <cstdio>  #include <algorithm>  #define INF 0x3f3f3f  using namespace std;  int dp[30010],a[30010];  int main()  {      int n,i,j;      while(scanf("%d",&n)!=EOF)      {          for(i=0;i<n;++i)          {              scanf("%d",&a[i]);              dp[i]=INF;          }          for(i=0;i<n;++i)              *lower_bound(dp,dp+n,a[i])=a[i];          printf("%d\n",lower_bound(dp,dp+n,INF)-dp);       }      return 0;  }