博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3955 最长严格上升子序列(加强版)
阅读量:6802 次
发布时间:2019-06-26

本文共 1142 字,大约阅读时间需要 3 分钟。

 时间限制: 1 s
 空间限制: 256000 KB
 题目等级 : 钻石 Diamond
 查看运行结果
 
 
题目描述 
Description

给一个数组a1, a2 ... an,找到最长的上升降子序列ab1<ab2< .. <abk,其中b1<b2<..bk。

输出长度即可。

 

输入描述 
Input Description

第一行,一个整数N。

第二行 ,N个整数(N < = 1000000)

 

输出描述 
Output Description

输出K的极大值,即最长不下降子序列的长度

样例输入 
Sample Input

5

9 3 6 2 7

 

 

样例输出 
Sample Output

3

数据范围及提示 
Data Size & Hint

n<=1000000

为了方便大家调试,数据名称已被修改——THREE

分类标签 Tags 

 

 

nlogn解法,运用函数的单调性

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int maxn=0x7ffff; 8 int n; 9 int dp[10000001];// 长度为i的最长上升子序列的长度 10 int a[10000001];11 int main()12 {13 scanf("%d",&n);14 for(int i=1;i<=n*2;i++)15 dp[i]=maxn;16 for(int i=1;i<=n;i++)17 scanf("%d",&a[i]);//dp[1]=min(dp[1],a[i]);18 for(int i=1;i<=n;i++)19 {20 int p=upper_bound(dp+1,dp+n,a[i])-dp;21 if(a[i]!=dp[p-1])22 dp[p]=a[i];23 }24 for(int i=1;i<=n+1;i++)25 if(dp[i]==maxn)26 {27 printf("%d",i-1);28 break;29 } 30 return 0;31 }

 

 

转载地址:http://vsjwl.baihongyu.com/

你可能感兴趣的文章
算法笔记--归并排序
查看>>
iOS --开发笔记:关于手机号码的判断【转】
查看>>
多标签分类
查看>>
Python基础教程(第2版 修订版) pdf
查看>>
python实现常见排序算法
查看>>
listctrl加入图标
查看>>
gem 更新源设置,ruby安装
查看>>
码农们:我们才是真正的土豪!
查看>>
[Node.js]NPM 使用
查看>>
Setup Factory打包winform程序
查看>>
window下php5.6-x64-ts可用php_redis.dll文件
查看>>
namenode 格式化错误 Unable to check if JNs are ready for formatting
查看>>
通达信公式-均线向上
查看>>
时间复杂度和空间复杂度
查看>>
NRF52832 能烧写代码 但是不运行 ,是因为没有烧写协议栈
查看>>
《android深入探索》第二章心得
查看>>
Hdu-6119 小小粉丝度度熊 尺取
查看>>
DNS查询相关
查看>>
[K/3Cloud]关于"选单"操作
查看>>
关于热部署-理解与总结
查看>>