最长非降子序列O(nlogn)

算法设计与分析:动态规划算法思想的应用 --最长非降子序列(非连续)问题 阅读详情

在最长上升序列O(nlogn)中当计算出的两个状态a和b满足A[a] < A[b]且d[a] = d[b]时,取a是最优的,但在非降这个要求中我们要保留的是b,因为一样的元素取的是最后一个,比如{1,2,2}中会取到第二个2,所以g[i]表示d值为i的最最大状态编号(如果存在),因此将lower_bound(返回第一个等于value的值的位置)更换成upper_bound(返回最后一个等于value的值的位置)。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define INF 1000000
int main(){
    int A[100],d[100],g[100];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>A[i];

    for(int i=1;i<=n;i++)g[i]=INF;

    for(int i=0;i<n;i++){
        int k=upper_bound(g+1,g+n+1,A[i])-g;
        d[i]=k;
        g[k]=A[i];
    }

    for(int i=0;i<n;i++)
        cout<<d[i]<<ends;
}
5.4 最长非降子序列5.5 循环赛日程表问题 5.4 最长非降子序列 【问题描述】一个序列,共 N 个元素。现在要求从序列找到一个长度最长、且前面一项不大于它后面任何一项的子序列。只需算出这个序列的长度。N≤100000。 【分析】 用动态规划求解,则状态转移方程为:f(i)=max{f(j)}+1( 且 i>j)。时间复杂度为 O(),n 很大时会超时。超时的原因是大部分时间都耗在了寻找 max{f(j)}上面。 根据这一点,我们可以对算法进行改进。假设数组 C[]已经是符合条件的最长非降子序列,C[i]表示序列中第 i 小的元素,那么我们就.. 阅读详情

相关推荐

动态规划(dp):最长公共子序列和最长上升子序列

最长公共子序列: 给你一个序列X和另一个序列Z,当Z中的所有元素都在X中存在,并且在X中的下标顺序是严格递增的,那么就把Z叫做X的子序列。 例如:Z=<a,b,f,c>是序列X=<a,b,c,f,b,c>的一个子序列,Z中的元素在X中的下标序列为<1,2,4,6>。 现给你两个序列X和Y,请问它们的最长公共子序列的长度是多少? 输入包含多组测试数据。每组输入占一行,为两个字符串,由若干个空格分隔。每个字符串的长度不超过100。 对于每组输入,输出两个字符串的最长公共

Enigma_wn的博客 367

第1关:最长非降子序列(非连续)问题

第1关:最长非降子序列(非连续)问题

m0_64562382的博客 1155

洛谷P2501数字序列 动态规划

题目 题目链接 题解 这道题目我觉得是神题,非常有意思的题目,也挺难做的。 第一问:求最少需要改变的数量 这一问比较简单,之前也见过这种套路。 定义dp[i]dp[i]dp[i]表示aaa序列中a[1,i]a[1,i]a[1,i]部分构成严格递增子序列且以a[i]a[i]a[i]为结尾所不需要改变的最大的数量。 那么转移方程就是: dp[i]=min1≤j&lt;i,a[i...

SUNSET 421

动态规划 最长非降子序列

动态规划 最长非降子序列

whing123的博客 1341

算法设计与分析:动态规划算法思想的应用

本关任务:给定2个字符串,试求出这2个字符串的最长公共子串的长度。 本关任务:给定一个矩阵matrix,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。...

Junds0的博客 1268

5、c++ 动态规划初级阶段

上面讨论了一个非常简单的例子。现在让我们来看看对于更复杂的问题, 如何找到状态之间的转移方式(即找到状态转移方程)。 为此我们要引入一个新词叫递推关系来将状态联系起来(说的还是状态转移方程)OK,上例子,看看它是如何工作的。一个序列有N个数:A[1],A[2],…,A[N],求出最长非降子序列的长度。 (讲DP基本都会讲到的一个问题LIS:longest increasing subsequence

sxj731533730 541

最长上升/非降子序列,长度查找及输出序列(典型例题记录)

复杂度均为 O(nlogn) 长度查找: int n; scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); if (n==0) //0个元素特判一下 { printf("0\n"); return 0; } d[1]=a[1]; //初始化 int len=1; for (int i=2;i<=n;i++)

Khasehemwy的博客 299

2025.1.16——五、LoveSQL1 sqlmap文件类|万能密码

题目来源:BUUCTF[极客大挑战2019]LoveSQL1。

2402_87387800的博客 1066

HDOJ 4604 - Deque O(nlogn)的最长非升(非降)

首先看几个可以完全放完的方案:     4 3 2 1 5 : (4),(3 4),(2 3 4),(1 2 3 4),(1 2 3 4 5)                                                                  3   4   2    5  1      :    (3),(3 4),(2 3 4),(2 3 4 5),(1 2 3

zzyzzy12 1027

AIGC在游戏行业的应用:革新游戏开发与体验

AIGC(人工智能生成内容)技术正在深刻改变游戏行业,从开发到体验全面革新。在游戏开发中,AIGC可用于自动生成关卡、角色和剧情,提升开发效率;在资源制作中,通过AI生成场景、角色模型等,降低成本。

1664

中微8S6990实战:5分钟搞定GPIO配置与按键中断(附避坑指南)

本文以中微8S6990单片机为例,详细讲解了GPIO按键中断的快速配置方法与实战避坑指南。内容涵盖GPIO初始化、中断配置、软件消抖优化及低功耗唤醒等关键步骤,并提供了利用逻辑分析仪进行调试验证的有效方法,帮助开发者快速构建稳定可靠的嵌入式按键交互系统。

weixin_29194817的博客 280

最长递增子序列

求出最长非降子序列的长度

人间词话·CODE 286

Anaconda/Miniconda的删除和安装

要在 MacBook 上删除 Anaconda 或 Miniconda,并重新安装它,您可以按照以下步骤进行操作。

qq_27390023的博客 3026

java算法题————最长非降子序列以及逆序对数

最长非降子序列以及逆序对数1.最长非降子序列2.逆序对数 1.最长非降子序列 时间复杂度:O(nlogn) 代码: public class 最长非降子序列 { public static void main(String[] args) { int []arr={1,2,5,4,6,4,5}; int length=lis(arr); System.out.printl...

Belief的博客 335

Landsat 9 数据预处理第一步:在ENVI里正确加载影像的保姆级指南(含MTL文件处理)

本文详细介绍了Landsat 9数据在ENVI中的预处理流程,重点讲解了MTL文件的关键修改与正确加载方法,帮助遥感新手快速掌握数据加载技巧。通过辐射定标、大气校正等步骤,确保数据达到分析就绪状态,适用于土地覆盖分类等高级应用。

weixin_29201313的博客 207

Android车载桌面开发实战:从CarLauncher源码解析到自定义Launcher开发(Android 11)

本文深入解析了Android 11中CarLauncher的源码架构与核心模块,并提供了从零开始定制开发车载Launcher的完整实战指南。内容涵盖车载桌面的独特定位、驾驶场景优化、多屏协同、动态内容嵌入等核心挑战,以及如何构建符合安全规范、体验流畅的自定义车载桌面应用,是车载应用开发者提升系统级定制能力的实用参考。

weixin_29266647的博客 515

牛客挑战赛36 C-纸飞机(最长非降子序列)

链接:牛客挑战赛36 C-纸飞机 题意: 给出长度为nnn(1≤n≤1061\le n\le 10^61≤n≤106)的序列a1,a2,⋯ana_1,a_2,\cdots a_na1​,a2​,⋯an​(1≤ai≤2301\le a_i\le 2^{30}1≤ai​≤230),求分别删除aia_iai​后最长严格下降子序列的个数。 分析: 根据Dilworth定理,就是求分别删除aia_iai...

Plus Ultra! 424

华为OD面试八股文嵌入式C语言基础问题及答案(一)

本文总结了C语言编程中的10个关键知识点:1.宏定义MIN的实现方法;2.嵌入式无限循环的两种写法;3.变量a的8种不同定义方式;4.static关键字的三种作用;5.const关键字的含义和使用场景;6.volatile关键字的含义及三个应用实例;7.变量存储位置(栈区、静态区、堆区);8.32位系统指针位数;9.局部与全局变量重名规则;10.引用与指针的三点区别。这些内容涵盖了宏定义、变量声明、存储类别、指针等C语言核心概念,对嵌入式开发和系统编程具有重要参考价值。

m0_50382756的博客 160

最长非降子序列dp与贪心+二分做法与树状数组

dp:o(n^2) 设dp[i]为以i结尾的最长非降子序列,则dp[i]=max(dp[i],dp[j]+1),其中a[i]>=a[j] 贪心+二分o(nlogn) 用一个新的数组f记录选出的非降子序列,若a[i]>=f[top],则将a[i]插入f,更新top,否则由贪心策略,考虑用a[i]来替换f中第一个>=a[i]的数,使得f更具作为最长非降子序列的潜力。(注意这样得...

wangqianqianya的博客 400

FPGA原理与结构(3)——存储单元(Storage Elements)

触发器,锁存器,寄存器,为什么xilinx推荐高电平复位,为什么latch依然存在,FPGA中的触发器与锁存器

apple_53311083的博客 2961

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NOIp2013 Training Series #1 Increasing

1、数列a1到an,修改最少的数字,使数列严格单调递增。 2、拿到这道题第一个想法是求最长上升子序列,但是很容易举出反例,1,5,4,2,3明显最长上升子序列是1,2,3,但是知道这个没有什么用,1,2之间没有多余的整数给5和4来修改了。难道要分类讨论?太麻烦了。 3、看到贴吧里的讨论,终于有了思路:其实,我们所有的要求就是a[j]-a[i]>=j-i,也就是说,如果两个数相差4,那他们中间最

546

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ACM-ICPC 2017 南宁赛区网络预赛 L The Heaviest Non-decreasing Subsequence Problem 【最长非递减子序列的变形】

 1000ms  131072K Let S be a sequence of integers s1​, s2​, ......, sn​ Each integer is associated with a weight by the following rules: (1) If is negative, then its weight is 0. (2) If is greater t...

逐梦者 231

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最大非增、非减子序列模板

1.dp思想:复杂度O(n^2) #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1e6+5; int a[N],f[N]; int d[N];//d[i]用于记录a[0...i]的最大长度 //最大非降子序列 int bsea...

M_Lter的博客 363

hdoj5256 序列变换(2015年百度之星程序设计大赛 - 初赛(2))

题目链接 想法题 题目要求修改后的数列严格递增,首先联想到LIS,再深入思考便列出式子:a[i]-a[j]>=i-j推出a[i]-i>=a[j]-j 具体操作:将读进来的数组处理a[i]-=i,就把问题转化为了求最长不下降子序列,复杂度O(nlogn)#include<bits/stdc++.h> using namespace std; int main() { int t,c,n,

qyq 357

Longest Increasing Subsequence

一个序列有N个数:A[1],A[2],…,A[N],求出最长非降子序列的长度。 (讲DP基本都会讲到的一个问题LIS:Longest Increasing Subsequence) 面对这样一个问题,我们首先要定义一个“状态”来代表它的子问题, 并且找到它的解。注意,大部分情况下,某个状态只与它前面出现的状态有关, 而独立于后面的状态。 我们来找一下“状态”和“状态转移方程”。 假如我们考...

106
上一篇: 最长上升子序列O(nlogn)
下一篇: C/C++基本数据类型大小及表示范围
FightingForFinal
博客等级 码龄11年 24粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值