[CF 1870E] Another MEX Problem

news/2025/4/2 8:40:59/文章来源:https://www.cnblogs.com/YzaCsp/p/18798723

思路

给你一个序列 \(a\), 让你选出一些不交的子段, 使得它们的 \(\rm{MEX}\) 的异或和最大

不难发现因为是异或和, 可以简单转化成 \(\mathcal{O} (n^3)\) 的可行性 \(\rm{dp}\)
然后我进行了对固定右端点 \(r\) 一些优化尝试, 发现都比较寄

然后发现这个题, 它, 对, 右端点, 进行优化了

然后就比较难受, 所以自己推一遍
首先掏一个平凡的转移

\[f_{i, j} \stackrel{k}{\longleftarrow} f_{k - 1, j \oplus \text{mex}\{k, i\}} \]

没错, 现找题解捞的

然后进行一些手推, 不难发现对于固定的 \(i\), 我们可以把 \(\text{mex}\{k, i\}\) 看成下面的形式
pErDgPA.png
在此基础上, 我们不难发现对于同颜色的一段, 我们可以统一对其取可行性, 显然的, 我们可以只取其右端点, 不然实际上仍然不好考虑
本质上是对于 \(f_{i, j}\) 来说, 提取 \(j\) 对应的函数 \(f_j (i)\) 一定是一个先 \(0\)\(1\) 的函数

也就是我们把问题简化到了这样
pErDOx0.png

考虑随着 \(i\) 的变换, 这些右端点会有什么变化呢
考虑对于 \(\text{mex} = c \in [1, n]\) 都维护一个右端点, 只不过有些右端点和左端点重合, 也就类似于这样
pErrkxx.png

考虑这些点随着 \(i\) 的变换怎样变化
pErrVsK.png
形式上来讲, 一些原本并不存在的点会被提出来, 而一些原本存在的点会消失, 而其他的点则不会发生任何变化

因此不难发现我们继承上一个点的状态之后, 只要考虑新出现的点即可, 而那些消失的点则可以直接忽略, 因为你也没有什么操作

那么消失之后再次出现这种情况会不会有影响? 发现可以不再考虑, 因为能转移的都在第一次出现时转移了
形式化的来讲, 就是找到第一次出现的位置

于是终于出现了子问题

子问题

分析题目

给定点 rr, 要求所有符合要求的点 ll, 使得区间 [l,r][l, r] 满足

区间 [l,r][l, r]rr 最小, ll 最大的区间使得区间 mex=k\text{mex} = k

找初步性质

满足要求的区间有多少

假设我们现在有一个好区间 [l,r][l,r], 他的 MEX0MEX\neq 0
我们假设 al>ara_l > a_r, 因为 al<ara_l < a_r 可以类似地讨论
显然, alara_l\neq a_r, 除非 al=0a_l=0

显然有 MEX(l,r)>alMEX(l,r) > a_l, 因为 MEX(l,r)MEX(l,r) 肯定不能等于 ala_l, 而且如果 MEX(l,r)<alMEX(l,r) < a_l, 就可以把 ala_l 踢出去, 那么 [l,r][l,r] 就不是一个好区间

我们假设有一个 r1>rr_1 > r, 使得 [l,r1][l,r_1] 是一个好区间, 且 al>ar1a_l > a_{r_1}

这样可能吗? 不可能
因为 al<MEX(l,r),ar1<ala_l < MEX(l,r),a_{r_1} < a_l, 所以 ar1<MEX(l,r)a_{r_1} < MEX(l,r)
这就说明, ar1a_{r_1} 已经在 [l,r][l,r] 中出现了, 不会产生任何贡献, 所以 [l,r1][l,r_1] 不是一个好区间

所以我们就证明了, 对于每个 ll, 至多有一个 rr, 使得 al>ara_l > a_r[l,r][l,r] 是一个好区间
同时, 这也说明了, 对于每个 rr, 至多有一个 ll, 使得 al<ara_l < a_r[l,r][l,r] 是一个好区间

而且, 如果 ai=0a_i=0, 那么 ii 一定不会是上面那两种好区间的端点, 但 [i,i][i,i] 本身就是一个好的区间, 它的 MEXMEX11

综上, 好的区间最多只有 2n2n

如何处理

直接枚举即可, 然后在基础上做转移
类似于这样

for (int i = 1; i <= n; i++)for (int j = i; j <= n; j++)if(mex[i][j] != mex[i + 1][j] && mex[i][j] != mex[i][j - 1]) l[j].push_back(i);

总结

这种分段转移问题, 往往可以尝试贪心, 当然直接维护也不失为一种方法
最关键的性质

提取 \(j\) 对应的函数 \(f_j (i)\) 一定是一个先 \(0\)\(1\) 的函数

拥有这种性质的问题, 往往可以大胆地联想到不同 \(r\) 的优化, 也就是变化量这样的

子问题提取法, 谢谢谢谢谢

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

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

相关文章

ChatGPT-4o 更新:原生图像生成技术详解:自回归路线的逆袭

一种新的图像生成范式正在崛起,它不再依赖传统的扩散过程,而是用语言的方式“写”出图像。2025年3月,OpenAI 在更新 GPT-4o 的同时,低调上线了其“原生图像生成”功能。这一功能被嵌入到 GPT-4o 的多模态架构中,与文本、音频等能力无缝协同,带来了显著提升的图像生成质量…

PVE-0-虚拟化实验环境准备

后续实验环境的搭建过程中的技术选型虚拟化环境简介 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机(对计算机物理资源的抽象,实现资源的模拟、隔离和共享)。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在…

【Java 玩转 MCP】手把手教你打造 Git AI 仓库助手

背景 随着人工智能技术的快速发展,开发者工具也在不断进化。Gitee 作为国内领先的代码托管平台,现已推出 MCP (Model Control Protocol) 功能,让开发者能够通过 AI 助手更高效地管理代码仓库。mcp-gitee 是 Gitee 的模型上下文协议 (MCP) 服务器实现,它提供了一组与 Gitee …

探秘Transformer系列之(19)----FlashAttention V2 及升级版本

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(19)----FlashAttention V2 及升级版本 目录探秘Transformer系列之(…

多线程程序设计(五)——Producer-Consumer

本文摘要了《Java多线程设计模式》一书中提及的 Producer-Consumer 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 为了匹配数据的生产者(Producer)线程与消费者(Consumer)线程之间的处理速…

Google Chrome AI innovations Al In One

Google Chrome AI innovations Al In OneGoogle Chrome AI innovations Al In OneConsole Insights & AI assistance通过控制台数据分析更好地了解错误和警告https://goo.gle/devtools-console-messages-ai https://developer.chrome.com/docs/devtools/console/understand…

【Java开发 】mcp server实战

Model Context Protocol(MCP)作为新一代 AI 服务交互协议,近期发布了 Java SDK 0.8 版本。 虽然新版本带来了更强大的会话管理能力和工具集成机制,但直接使用原生 SDK 仍存在以下挑战:需要手动处理依赖注入和生命周期管理工具注册流程较为复杂缺乏与现有 Spring 生态的深度…

T检验(Students T-test), Wilcoxon符号秩检验,Mann-Whitney U检验

1.基本概念 T检验 是一种统计学方法,用于判断两组数据的均值是否存在显著差异 。其核心思想是通过计算“t值”和对应的“p值”,评估观察到的差异是否由随机误差引起,还是反映了真实的生物学或实验效应。 适用场景 :比较两组独立样本的均值(如对照组 vs 实验组)。 检验单组…

写了 8 年C++,才知道this指针竟是这样工作的!从汇编看本质!

大家好,我是小康。今天我们来聊聊 C++ 的 this 指针。 相信我,看完这篇文章,你将彻底搞懂 C++ 中最神秘的 this 指针!不再被面试官问到 this 时一脸茫然! 前言:this指针,C++中的隐形杀手 嘿,朋友们!还记得第一次接触 C++ 的 this 指针时的懵逼感觉吗? "为啥要用…

Redis 过期键删除和内存淘汰策略【Redis 系列之四】

本文主要介绍了 Redis 过期键删除和内存淘汰策略,仅供参考。〇、前言 对于 Redis 服务器来说,内存资源非常宝贵,如果一些过期键一直不被删除,就会造成资源浪费。 那么,本文将结合博主收集的资料,简单介绍下过期键删除、内存淘汰两个策略,仅供参考。 博主 Redis 相关文章…

2025最新面试题-mysql面试题(三)

事务的四大特性 A账户 10000 -2000 8000+2000=10000 8000+2000 写入buffer Pool(内存缓冲池) Redo Log 环形日志 磁盘 B账户 5000 +2000 7000 原子性(Atomicity) 也就是我们刚才说的不可再分,也就意味着我们对数据库的一系列的操作,要么都是成功,要么都是失败,不可能出…