题解 P5397 [Ynoi2018] 天降之物
毒瘤卡常题。
考虑分块。先想查询。
对于块的内部,每个块预处理
对于块到块,不难发现对于同一个值,仅每个块最靠左的位置和最靠右的位置才可能是优的。所以维护
想想修改。对于
-
若当前块没出现
,直接跳过。 -
若当前块没出现
,直接将 对应的离散值传给 。 -
若当前
均出现,暴力更新关于 所有信息。因为每次这样修改都会使块内的颜色少一,每次修改 ,最多修改 次,共 个块,所以时间复杂度还是 。
假设
难点在于卡常。几个比较重要的优化。
-
表示真实值和离散值映射关系的
数组和 数组大小都是 的,且值域都是 ,可以开short
,空间常数能少一半,效果明显。 -
内存访问一定要连续。内存访问连续对常数影响巨大。令
数组第一维表示值,第二维表示块的编号。其他数组都以块编号为第一维。 -
数组以离散值为第二维,这样空间是 的。 -
保证 ,且尽量少调用 ,因为它内存访问相当不连续。可以把 压成一维,改为 ,我觉得效果不大。 -
随缘调调块长,我是
。 -
用 C++20,只有一两个点差几十毫秒可以多交几发,利用评测机波动,或者利用 O2 性质来一些无谓的循环(我感觉会快,可能是假的)。
我半个小时交了四页,要有持之以恒的耐心。
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话