首页 > 其他分享 >最长不下降子序列nlogn做法及其拓展

最长不下降子序列nlogn做法及其拓展

时间:2024-02-23 22:25:29浏览次数:24  
标签:排列 LIS 序列 nlogn 最长 单调

最长不下降子序列nlogn做法及其扩展

前言&nlogn做法

LIS表示最长不下降子序列

考虑设\(f_i\)表示LIS长度为i的最小值(具有单调性),对于每个新的x,二分出最大的满足\(f_i\)小于等于x的位置w,更新w+1

还有一种单调栈理解法,假若已经维护了一个LIS在单调栈里,对于一个新的x,二分出最大的满足值小于等于x的位置w,更新w+1,可以证明不会影响答案(其实代码来说是一样的)

[P7931 [COCI2021-2022#1] Volontiranje

给定一个 \(1\sim n\) 的排列 \(p\),请从这里面取出尽可能多的不交的上升子序列,且他们的长度为原排列的 LIS 的长度,并构造一组方案。

考虑用二分找到LIS长度len,然后把把出现在\(f_i\)中的数字都压进一个栈里(先出现的在栈顶)

于是我们得到len个栈:

其中每个栈中的元素单调递减,且总数为n

然后考虑构造一个LIS就只能从每个栈中各选一个,可以想到先取栈顶,若合法就取下一个栈,否则就pop,直到全部的栈为空

可以发现一定能取出最多的LIS

石中剑的考验

给出1 ∼ n的一个排列的一个最长上升子序列(长度为k,\(n\le15\)),求原排列可能的种类数。

其中原排列合法的充要条件是:

  1. 给出的子序列是原排列的子序列;

  2. 原排列的最长上升子序列长度为k。

发现n比较小,考虑状压,根据我们nlogn的单调栈思想,设\(f_{s}\),s是三进制,0/1/2表示未选/选了不在栈中/选了在栈中

然后n转移,跑不满

标签:排列,LIS,序列,nlogn,最长,单调
From: https://www.cnblogs.com/zhy114514/p/18028180

相关文章

  • 简易触发式关卡序列播放
    思路先制作一个关卡序列,然后使用触发器来播放该关卡序列展示步骤1.制作关卡序列创建相机以相机作为导航选中transform轨道按下“Enter”键进行关键帧2.创建播放触发器......
  • 读论文-基于序列模式的电子商务推荐系统综述(A Survey of Sequential Pattern Based E
    前言今天读的论文为一篇于2023年10月3日发表在《算法》(Algorithms)的论文,这篇文章综述了基于序列模式的电子商务推荐系统,强调了通过整合用户购买和点击行为的序列模式来提高推荐准确性、减少数据稀疏性、增加推荐新颖性,并改善推荐系统的可扩展性。文章详细分析了现有推荐系统的......
  • 【计数】序列转等概率环问题
    问题描述有\(m\)个人要坐\(n\)个位置,每个人的选择方式如下。首先选择一个座位,选定一个方向(向左/右),然后找到从这个座位开始这个方向的第一个空座位。如果这时走到尽头都选不到座位,就声称这个人失败了。一个完美的方案当且仅当所有人都不失败,求完美方案数。\(1\leqm\leq......
  • 代码随想录 day58 判断子序列 不同的子序列
    判断子序列dp[i][j]表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。if(s[i-1]==t[j-1])t中找到了一个字符在s中也出现了if(s[i-1]!=t[j-1])相当于t要删除元素,继续匹配不同的子序列dp[i][j]:以i-1为结尾的s子序列中......
  • 对象序列化内存占用问题
     一般而言,前端发起一个查询,后端接收请求而后去数据库检索并得到结果集,之后序列化为字符串返回给前端展示。在序列化方法接收一个集合到序列化(比如这里是json)的过程中,内存占用会增大吗?肯定会的,总体而言我们new出的对象,对象引用的字符、数字等都是存放在堆内存中;未序列化这些对......
  • [dotnet-Sec]初探反序列化
    [dotnet-Sec]初探反序列化参考Github上y4✌的开源笔记,狠狠学!环境搭建.NET:5.0IDE:Rider(JB家族)新建项目选择.NETCore(支持跨平台)下的控制台应用程序,然后创建这是接触到的关于dotnet的第一个反序列化demo,使用的是BinaryFormatter生成二进制流//Disablethewarning.#pragma......
  • R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测
    原文链接:http://tecdat.cn/?p=22632 原文出处:拓端数据部落公众号这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法。我们将对一种叫做STL的算法进行研究,STL是"使用LOESS(局部加权回归)的季节-趋势分解"的缩写,以及如何将其应用于异常检测。其基本思......
  • 读论文-序列感知推荐系统(Sequence-Aware Recommender Systems)
    前言今天读的论文为一篇于2018年发表在(ACMcomputingsurveys(CSUR))的论文,这篇文章主要讲述了序列感知推荐系统(Sequence-AwareRecommenderSystems)的研究和应用。文章首先介绍了推荐系统在实际中的应用背景,然后指出了传统推荐系统在处理用户行为序列信息方面的局限性。接着,文......
  • 大数分析(6)——Y序列
    前言然后是Y序列,0-Y可以直接与BMS相互转换,而基本的1-Y序列(常说的Y序列就是这个)便有着极大的提升,甚至可以提升到n-Y,\(\omega-\)YBMS和Y序列,便如同强者界的天道、奥加一般(同样的,后面由于缺少标定记号可能会跳过大段/直接开鸽阶差为1的情况请参考PrSS,完全一致,极限同样是\(\epsil......
  • 代码随想录 day57 最长公共子序列 不相交的线 最大子数组和
    最长公共子序列dp[i][j]:长度为[0,i-1]的字符串text1与长度为[0,j-1]的字符串text2的最长公共子序列为dp[i][j]主要就是两大情况:text1[i-1]与text2[j-1]相同,text1[i-1]与text2[j-1]不相同如果text1[i-1]与text2[j-1]相同,那么找到了一个公共元素,所以dp......