[题解]P12008 【MX-X10-T4】[LSOT-4] Fragment of Memories

news/2025/10/6 12:38:30/文章来源:https://www.cnblogs.com/Sinktank/p/19127472

P12008 【MX-X10-T4】[LSOT-4] Fragment of Memories

可以想到很 naive 的思路,对于每个 \(x\) 值二分答案 \(m\)check 函数可以 \(O(n)\) 完成。总时间是 \(O(n^2\log n)\) 的。我们发现 check 函数明显还能凹,考虑优化我们对段遍历的过程。

我们可以预处理出 \(a_i\) 之后第一个 \(a_i +1\) 出现的位置,然后就可以使用倍增快速找到 \(x\) 之后第一个合法的 \(x+m-1\) 的位置。寻找 \(x+m-1\) 之后第一个 \(x\) 的位置也不难。如此进行下去,直到进行不下去或者找到 \(k\) 段为止。

这样单次 check 复杂度是 \(O(c\log n)\) 的。其中 \(c\) 是我们总共经过的段数,也即:

\[c=\min(k,\min\limits_{i=x}^{x+m-1} cnt_i) \]

其中 \(cnt_x\)\(x\) 出现的次数。

这样所有查询的 \(c\) 之和一定是 \(O(n)\) 级别的,所以总时间优化到了 \(O(n\log^2 n)\)

继续优化的话,check 函数已经足够优秀了,考虑对外部的二分进行优化。

不难发现对于所有的 \(x\),都有 \(ans_x\ge ans_{x-1}\)

所以其实我们不需要二分,只需要用一个指针,每次从上一个答案 \(-1\) 开始扫描即可。这样 check 的次数是 \(O(n)\) 量级的,于是总时间优化到了 \(O(n\log n)\)

点击查看代码
#include<bits/stdc++.h>
#define eb emplace_back
using namespace std;
const int N=2e6+5;
int n,k,v,a[N],nxt[22][N];
vector<int> p[N];
inline int get_nxt(int x,int v){auto it=upper_bound(p[v].begin(),p[v].end(),x);return (it==p[v].end()?n+1:*it);
}
inline bool check(int x,int m){//基准记忆为x,m是否可行m--;//从x到x+m-1只需要跳m-1次for(int i=1,u=0;i<=k;i++){u=get_nxt(u,x);for(int j=0;j<=21;j++) if((m>>j)&1) u=nxt[j][u];if(u==n+1) return 0;}return 1;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>k>>v;for(int i=1;i<=n;i++) cin>>a[i],p[a[i]].eb(i);for(int i=1;i<=n;i++) nxt[0][i]=get_nxt(i,a[i]+1),nxt[0][n+1]=n+1;for(int i=1;i<=21;i++) for(int j=1;j<=n+1;j++)nxt[i][j]=nxt[i-1][nxt[i-1][j]];for(int i=1,w=0;i<=v;i++){if(w) w--;while(check(i,w+1)) w++;cout<<w<<" ";}return 0;
}

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

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

相关文章

自然语言处理(NLP)的系统学习路径规划 - 实践

自然语言处理(NLP)的系统学习路径规划 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

2.Android Compose 基础系列:在 Kotlin 中创建和使用变量

2.Android Compose 基础系列:在 Kotlin 中创建和使用变量在应用开发中,有些内容是固定的,例如“设置”中的菜单项;而有些内容会不断变化,比如新闻应用中的标题、来源或发布时间。为了让这些变化自动更新,而不是每…

wordpress开启多站点好处西安网站建设winkuo

shutil.copyfileobj() 是 Python 的 shutil 模块中用于复制文件对象内容的一个函数。它可以将一个文件对象的内容复制到另一个文件对象中。 shutil.copyfileobj(fsrc, fdst, length16*1024) fsrc: 源文件对象&#xff0c;即要从中复制内容的文件对象。fdst: 目标文件对象&…

线性表的顺序存储和链式存储

目录核心概念一、顺序存储(顺序表)1. 核心特点2. 实现方式3. 基本操作分析4. 优缺点总结二、链式存储(链表)1. 核心特点2. 实现方式(以单链表为例)3. 基本操作分析4. 优缺点总结三、对比总结表四、如何选择?核心…

AWS WebRTC:获取ICE服务地址(part 3):STUN服务和TURN服务的作用 - 实践

AWS WebRTC:获取ICE服务地址(part 3):STUN服务和TURN服务的作用 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

完整教程:进阶配置与优化:配置 HTTPS 以确保数据安全传输

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

贵州省城乡和住房建设厅官方网站网络方案设计与实现

二、用go语言&#xff0c;给定一个n结点的二叉树&#xff0c;写出一个 O(n)时间的递归过程&#xff0c;将该树每个结点的关键字输出。 文心一言&#xff1a; 在Go语言中&#xff0c;你可以使用递归函数来遍历二叉树的所有节点&#xff0c;并输出每个节点的关键字。以下是一个…

Python中的对象池与驻留机制:小整数、字符串与大整数

Python中的对象池与驻留机制:小整数、字符串与大整数 Python为优化内存使用和执行效率,设计了多种对象复用机制,其中最典型的是小整数对象池、字符串驻留(intern)机制和大整数对象池。以下是整理后的详细说明,包…

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

1.算法运行效果图预览 (完整程序运行后无水印)2.算法运行软件版本 matlab2024b3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)global MR%表示接收天线的数量 global MT%表示发射天线的数量 global mods…

厦门做返利网站的公司室内设计培训网课

1、# 创建数据库语句create database mydb default character set utf8;# 运用数据库语句use mydb;# 创建表格&#xff0c;这里只简单的创建一张表格# 设置InnoDB主要是为了事务操作的需要create table mytable(id int primary key auto_increment,name varchar(20),count int …

python网站开发 django沈阳网站哪家公司做的好

1. escape 和 unescapeescape()不能直接用于URL编码&#xff0c;它的真正作用是返回一个字符的Unicode编码值。采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在…

微服务各个部分的作用 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

US$34.2 KEYDIY KD B27-3 Universal Flip Remote 3 Buttons for Audi Type 5pcs/lot

KEYDIY KD B27-3 Universal Flip Remote 3 Buttons for Audi Type 5pcs/lotProduct Specifications:Manufacturer: KEYDIY Condition: New Color: Black Buttons: 3 Transponder: No Proximity / Smart / Keyless Go: …

郴州网站建设公司电话不备案域名能用吗

网络安全和内容交付网络&#xff08;CDN&#xff09;之间有着密切的关系。网络安全主要涉及保护网络和系统免受各种威胁和攻击&#xff0c;而CDN是一种用于提供更快速、高效和可靠的内容交付服务的技术。在当今数字化和云计算时代&#xff0c;网络安全和CDN之间的关系变得更加紧…

网站导航图怎么做的详细步骤wordpress默认分类链接

1 帐号管理、认证授权 1.1 账号管理 1.1.1 ELK-Huawei-01-01-01 编号&#xff1a; ELK-Huawei-01-01-01 名称&#xff1a; 无效帐户清理 实施目的&#xff1a; 删除与设备运行、维护等工作无关的账号 问题影响&#xff1a; 账号混淆&#xff0c;权限不明确&#…

计算机网站开发要考什么证网站文章怎么做才能被收录

目录 一、准备工作 1.环境相关 2.Unity中配置 二、热更新 1.创建 HotUpdate 热更新模块 2.安装和配置HybridCLR 3.配置PlayerSettings 4.创建热更新相关脚本 5.打包dll 6.测试热更新 一、准备工作 1.环境相关 安装git环境。Win下需要安装visual studio 2019或更高版…

点乘与叉乘的由来:从四元数到公理自洽的启示

一、背景:从实数到高维数的追求 人类在数学史上不断尝试扩展“数”的概念:实数用于度量线上的长度; 复数将数延伸到平面,引入虚数单位 (i),满足 (i^2 = -1)。哈密顿(William Rowan Hamilton)在19世纪中叶尝试将…

【算法深练】分组循环:“分”出条理,化繁为简 - 教程

【算法深练】分组循环:“分”出条理,化繁为简 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

网站建设竞争对数分析江苏建设集团招聘信息网站

1.2 中国高等级自动驾驶发展近况 通过对中国高等级自动驾驶行业的观察和分析&#xff0c;亿欧汽车认为&#xff0c;除技术解决方案提供商外&#xff0c;如今的车企、政府、资本同样在产业链中扮演重要角色。此外&#xff0c;车路协同技术的发展也为高等级自动驾驶的发展提供了更…

java学习日记10.5

运算符 优先级 最高括号 ( ) [ ] 后缀自增/自减 i++/i--单目运算符前缀自增/自减、正负号、按位取反、逻辑非 i++/i--、+/-、~、!强制类型转换 (int)算术运算符乘、整除、求模 *、/、% 加、减 +、-位运算符与移…