博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长不下降子序列 (O(nlogn)算法)
阅读量:5127 次
发布时间:2019-06-13

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

分析:

定义状态dp[i]表示长度为i的最长不下降子序列最大的那个数。

每次进来一个数直接找到dp数组第一个大于于它的数dp[x],并把dp[x - 1]修改成 那个数。就可以了

AC代码:

# include 
# include
# include
# include
using namespace std;const int N = 100012;int dp[N],n,pre[N],x,y,xh[N],a[N];void out(int k){ if(k)out(pre[k]);else return; printf("%d ",a[k]);}int main(){ memset(dp,0x3f3f3f3f,sizeof dp); for(int i = 1;i <= n;i++){ scanf("%d",&a[i]); y = upper_bound(dp + 1,dp + n + 1,a[i]) - dp; dp[y] = a[i]; xh[y] = i; pre[i] = xh[y - 1]; } int len = lower_bound(dp + 1,dp + n + 1,dp[0]) - dp - 1; printf("%d\n",len); out(xh[len]); return 0;}

 

转载于:https://www.cnblogs.com/lzdhydzzh/p/7673831.html

你可能感兴趣的文章
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
VMware Tools安装
查看>>
Linux上架设boost的安装及配置过程
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
zoj 2286 Sum of Divisors
查看>>
使用Xshell密钥认证机制远程登录Linux
查看>>
OpenCV之响应鼠标(三):响应鼠标信息
查看>>
Android 画图之 Matrix(一)
查看>>
List<T>列表通用过滤模块设计
查看>>
【模板】最小生成树
查看>>
设计模式之结构型模式
查看>>
poj2569
查看>>