当前位置: 首页 > news >正文

最长上升子序列nlogn算法

LIS问题是经典的动态规划问题,它的状态转移相信大家都很熟悉:

f[i] = f[k] + 1  (k < i 且 A[k] < A[i])

显然这样做复杂度是O(n^2)

有没有更快的算法呢?

当然,你会发现你在往前找的过程中实际上就是在查询最大值的过程,如果能应用二分就很有机会降到nlogn

但是原f[]序列并不满足二分性质呐。。怎么办呢?


我们要的是往前长度最大的,我们的二分目标就是长度

不妨开一个长度数组len[i],表示长度为i的上升子序列最后末尾的值的最小值

对于没算出的len,设为INF,每次算完f[i]后,就对len[f[i]]进行更新

这样子我们就可以每次logn算出f[i]


为什么这样是正确的呢?

应为len[]数组是单调递增的,长度为2的末尾值一定比长度为3的要小,所以我们写的二分一定是最大值的二分


fill(len,len + maxn,INF);
	len[0] = 0;
	int ans = 0;
	REP(i,n){
		//cout<<A[i]<<' ';
		int L = 0,R = ans;
		while (L < R){
			int mid = (L + R + 1) >> 1;
			if (len[mid] < A[i]) L = mid;
			else R = mid - 1;
		}
		f[i] = L + 1;
		len[f[i]] = min(len[f[i]],A[i]);
		ans = max(ans,f[i]);
	}
	cout<<ans<<endl;




转载于:https://www.cnblogs.com/Mychael/p/8282834.html

相关文章:

  • JAVA配置环境
  • C# 后台模拟请求一般处理程序
  • Windows平台,Oracle Database和Client并存方式
  • tomcat乱码问题1 (
  • Mysql集群讲解(五) 多主多从环境搭建
  • Oracle导出数据中的prompt,set feedback 等是什么意思
  • 【朝花夕拾】朝花夕拾-Robot Framework实战演练之开篇
  • hdu6242 计算几何
  • 查看iis对应w3wp.exe显示的进程ID号
  • 标准C程序设计七---11
  • ios 基础知识篇 堆和栈的区别
  • C# 禁止在textBox输入框输入非法字符
  • 读文本文件
  • c语言的学习貌似是需要多练多错在多练,所以我们大多数人课下都不看书。。...
  • 多线程查找大量数据加锁的速度降低
  • docker容器内的网络抓包
  • Git同步原始仓库到Fork仓库中
  • input的行数自动增减
  • LeetCode18.四数之和 JavaScript
  • tensorflow学习笔记3——MNIST应用篇
  • VuePress 静态网站生成
  • 力扣(LeetCode)21
  • 详解NodeJs流之一
  • 小程序button引导用户授权
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • scrapy中间件源码分析及常用中间件大全
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​马来语翻译中文去哪比较好?
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (42)STM32——LCD显示屏实验笔记
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 程序发生了一个不可捕获的异常
  • .sdf和.msp文件读取
  • /etc/sudoers (root权限管理)
  • ::什么意思
  • :如何用SQL脚本保存存储过程返回的结果集
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [<事务专题>]
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [BZOJ] 3262: 陌上花开
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [Hive] 常见函数
  • [JS] node.js 入门
  • [LeetBook]【学习日记】数组内乘积
  • [LeetCode]—Roman to Integer 罗马数字转阿拉伯数字
  • [LeetCode]—Simplify Path 简化路径表达式
  • [LuoguP1141]01迷宫