CF946G Almost Increasing Array 题解

news/2026/1/24 21:56:11/文章来源:https://www.cnblogs.com/xiaoniu142857/p/19527649

Solution

弱化版

首先不考虑删数操作,考虑至少修改数组中多少个数才能使其单调递增。

转而考虑未被修改的数必须满足的条件。若最终 \(a_i,a_j(i<j)\) 均未被修改,则有 \(j-i\le a_j-a_i\),即 \(a_i-i\le a_j-j\)。反过来,也能证明任意一个满足该条件的子序列一定能均不被修改。因而问题转化为求 \(n\) 减序列 \(\{a_i-i\}\) 的 LIS 长度。

考虑经典 \(O(n\log n)\) LIS 做法。设 \(f_i\) 为当前长 \(i\) 的不降序列最小末尾(如果不存在则 \(f_i=+\infty\))。每次二分找到最小的 \(k\) 使得 \(f_k\le a_i\) 并令 \(f_{k+1}\leftarrow\min(f_{k+1},a_i)\)。答案即为 \(n-\max(\{k|f_k<+\infty\})\)

原题

删数操作可以提至所有修改之前。

同理设 \(g_i\) 为当前已删除一个数时,长 \(i\) 的不降序列最小末尾(删的数不算)。

然后分讨 \(a_i\) 是否删除,共有三个操作。

  • \(a_i\) 删除:对于所有 \(k\)\(g_k\leftarrow \min(g_k,f_k)\)(操作 \(1\))。
  • \(a_i\) 不删除:
    • \(a_i-i\) 更新 \(f\)(操作 \(2\))。
    • \(a_i-i+1\) 更新 \(g\)。因为前面已经删了一个数,所以 \(a_i\) 实际下标为 \(i-1\)。(操作 \(3\))。

为了避免错误的覆盖,需要按 \(3\to 1\to 2\) 的顺序执行三个操作。

然后使用线段树维护 \(f,g\) 即可,时间复杂度 \(O(n\log n)\)

Code

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i(a);i<b;++i)
#define rept(i,a,b) for(int i(a);i<=b;++i)
#define ls(p) ((p)<<1)
#define rs(p) ((p)<<1|1)
using namespace std;
constexpr int N=2e5+5,INF=1.1e9;
int n,x,f[N<<2],g[N<<2];
bool tag[N<<2];
void add_tag(int p){tag[p]=true;g[p]=min(g[p],f[p]);
}
void push_up(int p){f[p]=min(f[ls(p)],f[rs(p)]);g[p]=min(g[ls(p)],g[rs(p)]);
}
void push_down(int p){if(tag[p]){add_tag(ls(p));add_tag(rs(p));tag[p]=0;}
}
int get(int tree[],int p,int pl,int pr,int x){  // 查找最后一个<=x的下标if(pl==pr) return pl;int mid=pl+pr>>1;push_down(p);if(tree[rs(p)]>x) return get(tree,ls(p),pl,mid,x);return get(tree,rs(p),mid+1,pr,x);
}
void upd(int tree[],int p,int pl,int pr,int pos,int x){  // 单点更新if(pl==pr){tree[p]=min(tree[p],x);return;}int mid=pl+pr>>1;push_down(p);if(pos<=mid) upd(tree,ls(p),pl,mid,pos,x);else upd(tree,rs(p),mid+1,pr,pos,x);push_up(p);
}
signed main(){cin.tie(0)->sync_with_stdio(0);cin>>n>>x;fill(f+1,f+(n<<2),INF);fill(g+1,g+(n<<2),INF);// 以i=1时为初始值upd(f,1,0,n,0,-INF);  // f[0]=-INFupd(f,1,0,n,1,x-1);  // f[1]=a[1]-1upd(g,1,0,n,0,-INF);  // g[0]=-INFrept(i,2,n){cin>>x;upd(g,1,0,n,get(g,1,0,n,x-i+1)+1,x-i+1);  // 操作3add_tag(1);  // 操作1upd(f,1,0,n,get(f,1,0,n,x-i)+1,x-i);  // 操作2}cout<<n-1-get(g,1,0,n,INF-1);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1211259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026.1.24 作业 - # P13521 [KOI 2025 #2] 包

2026.1.24 作业 - # P13521 [KOI 2025 #2] 包题目描述 商户是在 KOI 市经营商店的一位市民。商户的店里有 \(N\) 件商品,其中第 \(i\) 件商品的重量为 \(A_i\)。商户收到了情报,得知小偷“金基范”正觊觎自己的店铺…

国产PCB阻抗测试分析仪:Bamtone班通怎么样?

在PCB电子测试测量领域&#xff0c;阻抗测试分析仪是研发、生产和品质控制中不可或缺的关键设备。随着中国科技实力的不断提升&#xff0c;国产高端测试仪器正逐步打破国外品牌的长期垄断。作为国内领先PCB测量仪器、智能检测设备等专业解决方案供应商——班通科技凭借多年行业…

降AIGC率网站排名榜单:10大热门平台及免费付费功能对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

【毕业设计】基于springboot的智能药箱系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

YOLO26改进 - SPPF模块 | AIFI基于注意力的尺度内特征交互:替代SPPF构建高效混合编码器,提升模型综合效能

前言 本文介绍了实时检测Transformer&#xff08;RT-DETR&#xff09;及其核心AIFI模块在YOLO26中的结合应用。RT-DETR旨在解决YOLO速度和准确性受NMS负面影响、DETRs计算成本高的问题&#xff0c;通过设计高效混合编码器和解码器层数调整来提升性能。AIFI作为Transformer编码…

2026.1.24 作业 - # P1362 兔子数

2026.1.24 作业 - # P1362 兔子数题目描述 设 \(S(N)\) 表示 \(N\) 的各位数字之和,如 \(S(484) = 4+8+4 = 16\), \(S(22) = 2+2 = 4\)。如果一个正整数满足 \(S(x \cdot x) = S(x) \cdot S(x)\),我们称之为 Rabbit…

YOLO26改进 - SPPF模块 | 替代SPPF,FFocal Modulation焦点调制:即插即用轻量设计优化全局语义捕获

前言 本文介绍了焦点调制网络&#xff08;FocalNets&#xff09;及其在YOLO26中的结合应用。FocalNets完全用焦点调制模块替代自注意力&#xff0c;该模块由焦点上下文化、门控聚合和逐元素仿射变换组成&#xff0c;能有效建模视觉中的标记交互。它通过局部特征聚焦、全局信息…

大模型微调技术详解:从LoRA到P-Tuning v2,一文掌握高效微调方法

文章详解7种大模型微调技术&#xff0c;包括LoRA、QLoRA、适配器调整等参数高效微调(PEFT)方法。这些技术通过冻结主干参数&#xff0c;引入少量可训练参数&#xff0c;显著降低微调时的显存和计算需求&#xff0c;使资源有限环境下也能高效微调大模型。同时提供从零基础到进阶…

用通俗的方式介绍大语言模型训练过程,非常详细收藏我这一篇就够了

站在大语言模型外部看需要准备些什么样的训练数据&#xff0c;分什么阶段&#xff0c;怎样去训练大语言模型&#xff0c;把大语言模型看成一个黑盒。 LLM都是如何训练出来的呢&#xff1f; GPT的训练分为以下3个阶段&#xff1a; 1、预训练Pretrain 2、监督微调SFT (Supervised…

程序员收藏!AI产品经理转型与大模型学习全攻略,抢占AI时代先机,传统PM如何快速转型成AI产品经理?

文章详细介绍了人工智能时代产品经理的转型路径&#xff0c;包括AI基础知识学习、思维模式转变、算法边界熟悉和工作流程规划&#xff0c;强调抢走饭碗的不是AI本身&#xff0c;而是会利用AI的人。文章还提供了系统学习大模型(LLM)的资源包&#xff0c;帮助程序员建立AI认知体系…

大模型训练全攻略:从监督学习到数据预处理的完整指南

文章系统介绍大模型训练的五种学习方法&#xff1a;有监督学习&#xff08;基于标注数据&#xff09;、无监督学习&#xff08;基于数据内在结构&#xff09;、自监督学习&#xff08;自动构造伪标签&#xff09;、半监督学习&#xff08;少量标注大量未标注数据&#xff09;和…

字节序及IP地址转换

文章目录字节序检测主机字节序字节序转换函数函数原型示例IP地址字符串与二进制转换传统转换函数&#xff08;IPv4专用&#xff09;现代转换函数&#xff08;支持IPv4/IPv6&#xff09;线程安全的转换字节序 定义&#xff1a;多字节数据在内存中存储或网络传输时各字节的顺序两…

LeetCode 134. 加油站(O(n)时间+O(1)空间最优解)

✨ 本文针对 LeetCode 中等难度题目 134. 加油站&#xff0c;提供一种时间复杂度 O(n)、空间复杂度 O(1) 的最优解法&#xff0c;结合具体思路推导和代码实现&#xff0c;帮你快速吃透这道题。一、题目描述在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i…

【计算机毕业设计案例】基于Springboot的幼儿园综合管理系统基于springboot的幼儿园管理系统基于SpringBoot+Vue的幼儿园管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

提示工程架构设计实战:旅游行业智能推荐提示系统架构设计全流程

提示工程架构设计实战&#xff1a;旅游行业智能推荐提示系统架构设计全流程 一、标题选项 《提示工程落地指南&#xff1a;旅游行业智能推荐系统架构设计全流程》《从0到1&#xff1a;旅游行业智能推荐提示系统架构实战解析》《旅游推荐智能化&#xff1a;基于提示工程的系统…

【计算机毕业设计案例】基于Java的养老院管理系统的设计与实现基于springboot的养老院管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

深度学习篇---初看transformer

核心比喻&#xff1a;一个超级强大的“翻译官” 想象一下&#xff0c;你要把一段中文翻译成英文。一个传统的“翻译官”&#xff08;老式模型&#xff09;会这样做&#xff1a; 从左到右&#xff0c;一个字一个字地看&#xff0c;看完前面再猜后面。 像个记性不太好的人&…

固高控制板卡驱动安装教程

固高控制板卡驱动安装教程

基于大数据的图书推荐系统的设计与实现-计算机毕业设计源码+LW文档

基于大数据的图书推荐系统的设计与实现 摘要&#xff1a;本文详细阐述了基于大数据的图书推荐系统的研究背景意义、需求分析以及功能设计。该系统旨在解决信息过载下读者选书难和图书销售效率低的问题&#xff0c;通过大数据技术实现精准推荐。需求分析涵盖用户、商家等多方面需…

学术研究的第一步不再困难,AI工具助你轻松优化开题报告模板内容

AI开题报告工具对比速览 工具名称 核心功能 生成速度 适用场景 独特优势 AIbiye 全流程论文辅助 3-5分钟 从开题到定稿 深度学术逻辑构建 AIcheck 精准开题生成 2-3分钟 快速产出初稿 国内院校模板库 AskPaper 文献综述辅助 实时响应 研究现状分析 海量文献…