【Codeforces】 CF1870E Another MEX Problem
题目链接
CF方向
Luogu方向
题目解法
解法1
考虑优化 d p dp dp 转移次数,即只转移有用的区间
不难发现, m e x ( l , r ) = m e x ( l + 1 , r ) mex(l,r)=mex(l+1,r) mex(l,r)=mex(l+1,r) 或 m e x ( l , r ) = m e x ( l , r − 1 ) mex(l,r)=mex(l,r-1) mex(l,r)=mex(l,r−1),那么区间 [ l , r ] [l,r] [l,r] 就没用
考虑证明剩下有用的区间个数是 O ( n ) O(n) O(n) 的
若 [ l , r ] [l,r] [l,r] 是有用的,我们不妨令 a l > a r a_l>a_r al>ar
如果有 R > r R>r R>r 且满足 [ l , R ] [l,R] [l,R] 是有用的,且 a l > a R a_l>a_R al>aR
根据上面的定义, m e x ( l , r ) > a l mex(l,r)>a_l mex(l,r)>al,不然可以踢掉 l l l,所以 a R < m e x ( l , r ) a_R<mex(l,r) aR<mex(l,r),那么 r r r 就没有加的必要
所以对于 a l > a r a_l>a_r al>ar,有用的 r r r 只有一个
对于 a l < a r a_l<a_r al<ar 同理, a l = a r a_l=a_r al=ar 随便删去 l , r l,r l,r 都比 [ l , r ] [l,r] [l,r] 优
所以剩余的区间个数是 2 n 2n 2n 个
直接 d p dp dp 即可
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=5100;
int mex[N][N],cnt[N],a[N];
bool ok[N][N<<1];
vector<int> trans[N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
void work(){int n=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=n;i++){int curmex=0;for(int j=i;j<=n;j++){cnt[a[j]]++;while(cnt[curmex]) curmex++;mex[i][j]=curmex;}for(int j=0;j<=n;j++) cnt[j]=0;}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]) trans[j].pb(i);ok[0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=n<<1;j++) ok[i][j]=ok[i-1][j];for(int j:trans[i]) for(int k=0;k<=n<<1;k++) if(ok[j-1][k]) ok[i][k^mex[j][i]]=1;}for(int i=n<<1;;i--) if(ok[n][i]){ printf("%d\n",i);break;}for(int i=1;i<=n;i++) trans[i].clear();
}
int main(){int T=read();while(T--) work();fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}
解法2
我们发现 m e x mex mex 的上界是 2 n 2n 2n
所以我们考虑 g i g_i gi 表示异或 m e x mex mex 和为 i i i 最少需要的前缀长度
显然 g i g_i gi 可用类似最短路的方式实现
但这样会多一个 l o g log log,因为值域较小,开 n n n 个 v e c t o r vector vector 存最优位置对应的异或 m e x mex mex 值即可
相关文章:
【Codeforces】 CF1870E Another MEX Problem
题目链接 CF方向 Luogu方向 题目解法 解法1 考虑优化 d p dp dp 转移次数,即只转移有用的区间 不难发现, m e x ( l , r ) m e x ( l 1 , r ) mex(l,r)mex(l1,r) mex(l,r)mex(l1,r) 或 m e x ( l , r ) m e x ( l , r − 1 ) mex(l,r)mex(l,r-1…...
【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
怎么查找性别为女性的不同学历层次不同学位以及所有人不同职务职称的人数
怎么查找性别为女性的不同学历层次不同学位以及所有人不同职务职称的人数 需求分析: 1.统计性别为女性的所获学位下不同学历层次的人数 2.统计不同职务职称的不同学位和学历层次的人数代码 def cal_xuewei_number(self):# 读取表格文件table pd.read_excel("…...
浅谈Elasticsearch查询和搜索
Elasticsearch查询和搜索 Elasticsearch是一个分布式、实时的搜索和分析引擎,广泛应用于全文搜索、日志分析、实时数据分析等场景。Elasticsearch提供了丰富的查询和搜索功能,如查询DSL、过滤、排序、分页、高亮和聚合等。本文将详细介绍如何在Elastics…...
SLAM从入门到精通(被忽视的基础图像处理)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 工业上用激光slam的多,用视觉slam的少,这是大家都知道的常识。毕竟对于工业来说,健壮和稳定是我们必须要考虑的…...
【C++】继承详解
本篇要分享的内容是关于继承的内容哼哼哼啊啊啊啊啊啊啊啊啊啊啊啊啊啊 以下为本篇目录 目录 1.简单了解继承 2.继承的简单定义 3.继承简单使用 4.继承方式 4.1基类的privat 4.2基类的protected 4.3不可见与private的区别 5.父子类对象赋值转换 6.继承的作用域 7.子…...
react:swr接口缓存
useSWR 是一个 React Hooks,是 HTTP 缓存库 SWR 的核心方法之一。SWR 是一个轻量级的 React Hooks 库,通过自动缓存数据来实现 React 的数据获取。 第一个参数是被缓存的数据的 key, 第二个参数是一个函数,该函数返回数据或者一个…...
2023-11 | 短视频批量下载/爬取某个用户的所有视频 | Python
这里以鞠婧祎的个人主页为demo https://www.douyin.com/user/MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz 【2023-11-4 23:02:52 星期六】可能后面随着XX的调整, 方法不再适用, 请注意 找到接口 找到https://www.douyin.com/aweme/v1/web/…...
【JAVA学习笔记】66 - 本章作业(IO流)
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter19/src/com/yinhai/homework 1.使用File类和FileWriter类 (1)在判断e盘下是否有文件夹mytemp,如果没有就创建mytemp public class Homework01 {public static void main(String…...
vscode中 vue3+ts 项目的提示失效,volar插件失效问题解决方案
文章目录 前情提要bug回顾解决方案最后 前情提要 说起来很耻辱,从mac环境换到window环境,vscode的配置都是云端更新过来的,应该是一切正常才对,奇怪的是我的项目环境出现问题了,关于组件的ts和追踪都没有效果ÿ…...
Elasticsearch:在 ES|QL 中使用 DISSECT 和 GROK 进行数据处理
目录 DISSECT 还是 GROK? 或者两者兼而有之? 使用 DISSECT 处理数据 Dissect pattern 术语 例子 DISSECT 关键修饰符 右填充修饰符 (->) 附加修饰符 () 添加顺序修饰符( 和 /n) 命名的跳过键(?…...
基于自适应自回归模型的高级人工智能概念及其实现
基于自适应自回归模型的高级人工智能概念及其实现 摘要:一、引言:二、方法:三、讨论:四、结论:草稿实现计算摘要: 在人工智能研究领域中,预测未来的信息往往会遇到信息不明确的问题,尤其是在自回归模型中,这一问题尤为突出。本研究提出一个新颖的假设,将能自主解决信…...
windows的mysql启动错误,查看windows日志
1、点击左下角开始按钮,计算机上右键,点击【管理】。 2、在计算机管理界面依次找到【系统工具】,选择【时间查看器】,打开【windows日志】,点击【应用程序】 3、在右侧找到,最新的mysql错误信息。双击查看。…...
centos7部署Canal与Canal集成使用
1、简介 canal [kə’nl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigge…...
C语言--分段函数--switch语句
如何用switch语句写分段函数呢?⭐️ 首先介绍一下switch语句的语法规则⭐️ switch(整形表达式) {case 常量表达式1; //标签必须唯一语句块1;break;case 常量表达式2; //if(a0),而case中时系统自动加语句块2;break;c…...
动态规划31(Leetcode188买卖股票的最佳时机4)
代码: 我的状态方程: buy[i][j]max{buy[i−1][j],sell[i−1][j-1]−price[i]} 题解里的: buy[i][j]max{buy[i−1][j],sell[i−1][j]−price[i]} ..没理解题解的 但我的通过了 class Solution {public int maxProfit(int k, int[] pric…...
npm包管理相关命令
前置条件,准备npm账号,并登录,npm login 或者 npm adduser (这一行同样需要输入账号密码登录,之后就不用登录了) 验证是否登录:npm whoami 还可以查看用户简介:npm profile get …...
2023年Q3乳品行业数据分析(乳品市场未来发展趋势)
随着人们生活水平的不断提高以及对健康生活的追求不断增强,牛奶作为优质蛋白和钙的补充品,市场需求逐年增加。 今年Q3,牛奶乳品市场仍呈增长趋势。根据鲸参谋电商数据分析平台的相关数据显示,2023年7月-9月,牛奶乳品市…...
软考 系统架构设计师系列知识点之边缘计算(2)
接前一篇文章:软考 系统架构设计师系列知识点之边缘计算(1) 所属章节: 第11章. 未来信息综合技术 第4节. 边缘计算概述 3. 边缘计算的特点 边缘计算是在靠近物或数据源头的网络边缘侧,融合网络、计算、存储、应用核心…...
Maven中的继承与聚合
一,继承 前面我们将项目拆分成各个小模块,但是每个小模块中有很多相同的依赖于是我们创建一个父工程将模块中相同的依赖定义在父工程中,然后子工程继承父工程Maven作用:简化依赖配置,统一依赖管理,可以实现多重继承像J…...
告别‘炼丹’低效!手把手教你用TinyViT的‘稀疏软标签’实现快速模型蒸馏
突破计算瓶颈:TinyViT稀疏软标签蒸馏实战指南 在模型压缩领域,知识蒸馏一直是个让人又爱又恨的技术。它能将大模型的知识精华提炼给小模型,但传统方法需要反复调用庞大的教师模型,这种"炼丹"过程不仅耗时耗力࿰…...
Pixelle-Video:三步实现AI全自动短视频生成的专业开发指南
Pixelle-Video:三步实现AI全自动短视频生成的专业开发指南 【免费下载链接】Pixelle-Video 🚀 AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video Pixelle-Video是一…...
终极屏幕翻译神器:Translumo让你的Windows电脑瞬间打破语言壁垒
终极屏幕翻译神器:Translumo让你的Windows电脑瞬间打破语言壁垒 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo …...
AI 工程化实战:拒绝“胡说八道”,用 RAG 给大模型外挂私有大脑!
Qt是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...
为什么92%的AI PoC项目在Docker沙箱中泄露训练数据?:深度解析cgroups v2 + seccomp + no-new-privileges三重失效链及修复checklist
更多请点击: https://intelliparadigm.com 第一章:Docker Sandbox 运行 AI 代码隔离技术对比评测报告 在 AI 模型开发与部署实践中,安全执行不可信第三方代码(如用户提交的推理脚本、自定义训练逻辑)已成为关键挑战。…...
代码随想录算法训练营Day-37动态规划05 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
完全背包 视频链接 与0-1背包的本质区别:0-1背包每个物品最多用1次,所以只有0(不装包)和1(装包)两种状态;完全背包每个物品不限制使用次数。 代码上的区别: 1. 容器遍历顺序可正序…...
这道 AI 考题,99% 的人都选错了——不是因为他们笨
这道 AI 考题,99% 的人都选错了——不是因为他们笨 ——关于"本体"这道题,今天一次性讲透 说实话,我看到这道题的时候,第一反应是:完了,这是哲学题还是计算机题? “本体”(…...
Unity立方体贴图技术:环境反射与动态阴影实现
1. Unity中的立方体贴图技术概述立方体贴图(Cubemap)作为实时渲染中实现环境反射与折射效果的核心技术,其本质是由6张2D纹理组成的立方体纹理集合。与传统2D纹理不同,立方体贴图通过方向向量进行采样,这使得它特别适合模拟全向的环境光照效果…...
python枚举类型遍历数据并获得索引号
在 Python 中,可以使用 enum 模块创建枚举类型,并通过遍历枚举成员来获取其索引号(即枚举值的序号)。以下是详细方法和示例:方法 1:使用 enum.Enum 和 enumerate() 通过 enumerate() 遍历枚举成员ÿ…...
ColabFold蛋白质结构预测:从算法思维到生产实践的全栈指南
ColabFold蛋白质结构预测:从算法思维到生产实践的全栈指南 【免费下载链接】ColabFold Making Protein folding accessible to all! 项目地址: https://gitcode.com/gh_mirrors/co/ColabFold ColabFold作为现代蛋白质结构预测的民主化工具,将Alph…...
