单调递增子序列(二)
来源:互联网 发布:照片动态制作软件 编辑:程序博客网 时间:2024/04/28 09:55
单调递增子序列(二)
时间限制:1000 ms | 内存限制:65535 KB
难度:4
- 描述
给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长子序列,并求出其长度。
如:1 9 10 5 11 2 13的最长单调递增子序列是1 9 10 11 13,长度为5。
- 输入
- 有多组测试数据(<=7)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的下一行里有n个整数,表示数列中的所有元素.每个整形数中间用空格间隔开(0<n<=100000)。
数据以EOF结束 。
输入数据保证合法(全为int型整数)! - 输出
- 对于每组测试数据输出整形数列的最长递增子序列的长度,每个输出占一行。
- 样例输入
71 9 10 5 11 2 1322 -1
- 样例输出
51
我的代码:
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;int BS(int *p,int R,int q){int L=1,mid;while(L<R){mid=(L+R)/2;if (p[mid]<q){L=mid+1;}else{R=mid;}}return L;}int main(){int n,m,i,len;int a[100010],f[100010];while (~scanf("%d",&n)){len=1;for (i=0;i<n;++i){scanf("%d",&a[i]);}m=0;f[1]=a[0];for (i=1;i<n;++i){if (f[len]<a[i]){f[++len]=a[i];}else{f[BS(f,len,a[i])]=a[i];}}cout << len << endl;}return 0;}
标程:#include<cstdio>#include<algorithm>using namespace std;const int MAX=100100;int num[MAX],top=0;int main(){int n;while(~scanf("%d",&n)){scanf("%d",&num[0]);top=1;for(int i=1;i!=n;i++){scanf("%d",&num[i]);int * p=lower_bound(num,num+top,num[i]);if(p-num==top) ++top;*p=num[i];}printf("%d\n",top);}}
0 0
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列二
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列(二)
- 单调递增子序列(二)
- nyoj 单调递增子序列(二)
- NYOJ 214 单调递增子序列(二)
- 单调递增子序列(二) NYOJ
- NYOJ 214 单调递增子序列(二)
- NYOJ 214 单调递增子序列二
- 单调递增子序列(二)
- MySQL 数据库开发的 36 条军规
- HBase的三种操作方式
- Java基础---IO流三(字节流& 字符流)
- NSNumberFormatter
- spark杂记(一)
- 单调递增子序列(二)
- HTML <form> 标签
- [转] 扒一扒这个数据挖掘行业,黄油和面包
- block使用小结、在arc中使用block、如何防止循环引用
- HDU ACM 1176 免费馅饼
- [转]我的数据挖掘之路——从菜鸟到实战
- 第八周项目2 TIME类中的运算重载符
- bat命令实现动态修改
- Hinton关于RBM的代码注解之(一)rbm.m