模拟 最长上升子串

最长上升子序列/子串和最长公共子序列/子串 文章目录子序列(不连续)最长上升子序列(暴力回溯)(动规)(动规 + 二分 + 贪心)(动规 + 二分 + 贪心)化简版最长公共子序列(动规)(动规)子序列(连续)最长连续上升子序列(动规)(双指针)最长公共子数组 (动规)(动规 一维数组优化)(滑动窗口 待更新) 子序列(不连续) <span id = “最长上升子序列">最长上升子序列 LIS(longest increasing subsequence)是最经典的动态规划题目之一,因为它的递推公式很有条理,可以很清楚的告诉我们什么状态可以 阅读详情
   

问题 A: 最长上升子串

时间限制: 2 Sec  内存限制: 64 MB

题目描述

输入

6
7 2 3 1 5 6

输出

5

提示

     出题人说这是联赛DAY1的难度。。。第一眼看觉得挺难。。。再看一眼。。。发现好水,

     联考时就AC了,他们还有树状数组优化出O(N*log(N)^2)效率就去讲台上装逼的。。实在没忍住,给他们讲了讲我O(N)效率的大模拟。。。

     不扯淡了,因为必须要选连续的区间,而已经是严格上升的子串不会被修改。所以处理出每一个严格上升的区间,去考虑是否修改其两端点。如果这个区间就一个点,特殊考虑就行。

     

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define inf 1000000000
#define N 300000
using namespace std;
int read()
{
    int sum=0,f=1;char x=getchar();
    while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}
    while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();}
    return sum*f;
}
int n,a[N+5],b[N+5],cnt,ans=0;
struct node
{
    int l,r,size;
} t[N+5];
int main()
{
    n=read();
    a[0]=inf;a[n+1]=-inf;
    for(int i=1;i<=n;i++)
    {
        a[i]=read();
        if(a[i]<=a[i-1])
        {
            cnt++;
            b[i]=cnt;
            t[cnt].l=i;
            t[cnt].size++;
            t[cnt-1].r=i-1;
        }
        else
        {
            b[i]=cnt;
            t[cnt].size++;
        }
    }
    t[cnt].r=n;t[cnt+1].l=n+1;
    for(int i=1;i<=cnt;i++)
    {
        if(t[i].l==t[i].r)
        {
            if(a[t[i+1].l]-a[t[i-1].r]>1)
               ans=max(ans,t[i-1].size+t[i+1].size+1);
            else
               ans=max(ans,max(t[i-1].size,t[i+1].size)+1);
        }
        else
        {
            int l=t[i].l,r=t[i].r;
            if(a[l+1]-a[l-1]>1)
               ans=max(ans,t[i-1].size+t[i].size);
            if(a[r+1]-a[r-1]>1)
               ans=max(ans,t[i].size+t[i+1].size);
            if(t[i].size!=n)ans=max(ans,t[i].size+1);
            else ans=n;
        }
    }
    cout<<ans;
}

Dp——最长上升子串、最长上升子序列 最长上升子串 一、题目描述 描述 一个数的子串bi,当b1 < b2 < … < bS的时候,我们称这个子串是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子串(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。如:对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子串,如(1, 7), (3, 5, 9)等等。这些子串中最长的长度是3,比如子序列(3, 5, 9). 阅读详情

相关推荐

最长上升子序列 (LIS) 详解+例题模板 (全)

欢迎访问https://blog.youkuaiyun.com/lxt_Lucia~~ 宇宙第一小仙女\(^o^)/~~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~~ ------------------------------------我只是一条可爱哒分界线-------------------------------------- 1.摘要: 关...

lxt_Lucia的博客 19万+

第四讲:最长上升子串

给出一个长度为n的由正整数构成的序列,你需要从中删除一个正整数,很显然你有很多种删除方式,你需要对删除这个正整数以后的序列求其最长上升子串,请问在所有删除方案中,最长的上升子串长度是多少。假设删除i点,如果i点前面的最长上升子串的最大值小于右边最长上升子串的最小值,则就可以将它们相加。所以根据这个方法我们可以先预处理出以i为结束的最大上升子串的所有值,和以i为开始的最大上升子串的所有值。,则称这连续的若干个整数构成的子串为上升子串,在所有的上升子串中,长度最长的称为最长上升子串。...

qq_46470984的博客 561

牛客网华为软件测试题库,牛客网华为机试题答案

大家好,小编为大家解答牛客网华为软件测试题库的问题。很多人还不知道牛客网华为机试题答案,现在让我们一起来看看吧!

Z77888_的博客 537

最长上升子串

给定一个数组求其最长上升子串 输入样例: 6 3 2 4 5 3 6 输出样例: 3 解释:子串区别于子序列,子序列不要求连续,子串要求连续 #include<cstdio> #include<algorithm> using namespace std; int dp[100]; int main() { int n,list[100],ans=...

qq_41706331的博客 2507

从零开始:手把手教你检查并更新英伟达GPU驱动和CUDA版本(Windows/Linux双平台)

本文详细指导如何在Windows和Linux系统上检查并更新英伟达GPU驱动和CUDA版本,解决版本不匹配导致的常见问题。涵盖驱动更新、CUDA Toolkit安装、版本冲突排解及性能优化技巧,帮助开发者高效管理GPU计算环境。

weixin_29237635的博客 701

蛋白组学/磷酸化蛋白组学分析笔记-2

如何校正蛋白丰度?磷酸化组学质谱下机处理。

weixin_43029125的博客 1373

繁华模拟赛 最长上升子串

#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; int n,a[300005],l[300005],r[300005],ans; ...

weixin_30426065的博客 87

Android-S无线模块前瞻

WiFi - mainlane非强制 S 采用反射的方法直接加载wifiservice,直接hook在systemserver上,无编译依赖。gms可以动态替换wifi服务。 R 采用直接启动service的方式,wifiservice仍然map在systemserver上。 WiFi - 11ad接口支持 11ad被wifi联盟商业化为WIGIG,提供短距的60GHZ载波,理论速度为当前5G 11ac的6倍。市面上基本没有手机支持,需要独立的芯片支撑此功能。 传输距离为3m以内,外界d.

头铁的伦的博客 1044

2022年天梯赛选拔赛第2场

A.Kimi的心情 签到题 直接模拟,相信大家都会 #include <bits/stdc++.h> using namespace std; int n,d; int ans; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&d); if(d)ans++; } printf("%d %d\n",ans,n-ans);

qq_52139055的博客 1741

【2026最新版】PCL点云处理算法汇总(C++长期更新版)

PCL学习目录。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 63万+

YOLO11改进 | 主干网络 | 添加Hyper-YOLO的MANet混合聚合网络

本文详细介绍了在YOLO11目标检测模型中替换C3k2模块为MANet的具体实现方法。文章首先讲解MANet模块的原理,然后分步骤指导如何在YOLO11中添加该模块,包括代码修改、文件配置和模型注册等关键环节。通过实验对比,改进后的YOLO11_MANet模型在保持8.8GFLOPs计算量的同时,参数数量达到3,820,272,网络层数增加到343层。文章还提供了完整的代码实现和网络结构图,并建议结合其他注意力机制或损失函数进一步提升检测效果。最后推荐了相关的深度学习专栏,包含更多YOLO系列改进方法。

kay_545 660

2023北京师范大学计算机保研机试真题

2023北京师范大学保研上机真题北京师范大学AI夏令营第一批保研上机真题。

u014339447的博客 305

069、PCIE属性字段:缓存、顺序与安全

上个月调试一块自研的PCIE采集卡,遇到了一个诡异的问题:主机通过DMA从设备读取图像数据,大部分帧正常,但偶尔会出现局部数据错位,像是缓存没刷干净。用逻辑分析仪抓链路层报文,发现TLP(事务层包)本身完好,但内存中的数据就是不对。排查三天后,终于锁定在设备端TLP的**属性字段(Attribute Field)**配置上——那几位看似不起眼的缓存、顺序控制位,差点让项目延期。今天我们就拆解PCIE事务头中的这个关键区域,看看它如何影响系统性能与数据安全。

z534437748的博客 50

[noip测试]最长上升子串(乱搞||dp)

题目描述 题解其实这题很sb啊,就处理出以i开头和以i结尾的最长上升子串然后枚举断点就可以了呀。 但是我考试的时候闲的蛋疼写了个dp,而且还调了好久。。 设f(i,0/1)表示前i个,修改/不修改(不能修改第i个)的最长长度,然后就可以递推了。 最后的答案为max{f(i,0)+1,f(i,1)}。 不过有一种情况全单增的话ans会变成n+1,这种要判掉。代码#include<iostre

zyf2000 840

64.qt quick-qml使用高德地图插件实现V2版本(新增:位置搜索、路径规划、轨迹编辑等)

qt quick-qml高德地图插件(新增:位置搜索、路径规划、轨迹编辑等) Qt地图插件,使用简单方便,不用浏览器内核,运行高效迅速 跨平台支持,(Qt Windows(MinGW, MSVC)\Linux(桌面、嵌入式)\Android\IOS\等) 在线更新瓦片地图下载,并且支持缓存保存离线地图实现.........

抵抗时间扭曲,坚持做一件有意义的事 6131

YOLOv11改进 - C3k2融合 | C3k2融合融合WDBB宽度多样分支模块(Width Diverse Branch Block)通过多尺度分支增强特征表征能力

本文着眼于灰度图像目标检测所面临的挑战,提出了增强型目标检测网络 YOLO - MIF,该网络整合了多种多信息融合策略以对 YOLOv8 网络进行改进。文章开篇介绍了一种可创建伪多通道灰度图像的技术,此技术能增加网络的通道信息,同时缓解潜在的图像噪声与虚焦模糊问题。随后运用网络结构重新参数化技术,在不增加推断时间的情况下提升网络的检测性能。此外,引入了一种新颖的解耦式检测头,增强了模型处理灰度图像时的表现能力。

魔改工程师的博客 770

【编程】最长上升子串构造-美团笔试

题目描述: 给出一个长度为n的由正整数构成的序列,你需要从中删除一个正整数,很显然你有很多种删除方式,你需要对删除这个正整数以后的序列求其最长上升子串,请问在所有删除方案中,最长的上升子串长度是多少。 这里给出最长上升子串的定义:即对于序列中连续的若干个正整数,满足a[i+1]>a[i],则称这连续的若干个整数构成的子串为上升子串,在所有上升子串中,长度最长的称为最长上升子串。 输入...

Jiawen9的博客 805

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SDNUOJ 1172.Queue(双向dp)

SDNUOJ 1172这道题一开始思路就是把线段分成两半,左边求上升右边求下降,然后果断wa,因为没有好好读题,上升子序列最后一位必须是下降子序列第一位,这就很难受了,但是仔细分析一下不难发现,dp[i]表达的是以a[i]结尾的最长子序列例如:求 1 3 2 4 5 的最长上升子序列模拟dp过程应该有dp[1] = 1, dp[2] = 2, dp[3] = 2, dp[4] = 3, dp[5]...

STOP 293

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

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【C++算法】线性DP详解:数字三角形、最长上升子序列、最长公共子序列、最长公共子串、字符串编辑距离

【代码】【C++算法】线性DP详解:数字三角形、最长上升子序列、最长公共子序列、最长公共子串、字符串编辑距离。

qq_63586399的博客 2526

最长子序列,最长子串

notice:子序列可以是不连续的;子串是连续的; 一个序列中最长上升子序列的长度 序列由数字组成,后面的数字大于前面的数字,为上升 #nums 数字序列 def longest(nums): size = len(nums) if size<2: return size # 状态dp[i]: nums[:i+1]中最长上升子序列的长度 # 初...

marmalade要天天向上 235

最长上升子序列

对于最长上升子序列用dp算法写的,简单易懂

gaoqiandr的博客 448

DP系列之(最长上升子序列 )

同样是一篇dp总结:   最长上升子序列 例题:https://vjudge.net/contest/278813#problem/C 普通写法的板子:(注意要从大往小找!!!)(待思索……) #include &lt;bits/stdc++.h&gt; #define ll long long #define N 1005 //最长上升子序列,从大往小找的方法 using name...

suheyin的博客 671

leetcode实战——300. 最长上升子序列(动态规划+分治法)

300. 最长上升子序列 题目 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2)O(n^2)O(n2) 。 思路 首先看到这道题,刷题...

bryansun的博客 789

最长递增子序列( LIS)

LIS LIS的优化说白了其实是贪心算法,比如说让你求一个最长上升子序列把,一起走一遍。 比如说(4, 2, 3, 1, 2,3,5)这个序列,求他的最长上升子序列,那么来看,如果求最长的上升序列,那么按照贪心,应该最可能的让该序列的元素整体变小,以便可以加入更多的元素。现在开辟一个新的数组,arr[ 10 ], { .......} --> 这个是他的空间 ,现在开始模拟贪心算法求解...

weixin_30951231的博客 2284
上一篇: 差分约束+tarjin [Poi2012]Festival
下一篇: 大模拟 中值滤波
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值