当前位置: 首页 > news >正文

【题解】CF2085F2 Serval and Colorful Array (Hard Version)

先考虑比较暴力的做法。枚举选择的子序列最中间的位置 \(i\),这样一来根据经典贪心结论,左右两侧都分别需要选 \(\frac k2\) 个(对 \(2\mid k\) 的情况需要处理左边多选一个还是右边多选一个)。对每个值不和 \(i\) 相等的值,求出 \(i\) 左右两侧第一个和其值相同的位置 \(l_j,r_j\),贪心排序选取就可以做到 \(O(n^2\log n)\)

考虑优化该算法。容易发现可以去掉在左右两侧分别选 \(\frac k2\) 个数的限制,直接贪心取 \(\min\) 放即可。证明的话考虑一个位置左右两侧的元素个数如果不相同那么一定可以调整到更优,因此最小值一定不会被漏过去。这样就可以优化到 \(O(n^2)\) / \(O(nk)\) 解决。

考虑从左往右扫描位置 \(i\)。注意到对每个值 \(j\),在 \(i\) 右移一个单位的时候 \(j\) 的贡献的变化必然为 \(-1,0,1\) 中的一个。然后还可以发现若当前元素的值在中心位置之前则贡献的变化为 \(-1\),在中心位置之后则贡献为 \(1\)。而特殊的,若 \(2\mid k\),则需要特殊处理:此时存在两个中心,在两个中心变化的过程中该位置的贡献不会变化。

注意到贡献变化相同的位置是一段区间,写一个二阶差分即可 \(O(n)\) 维护答案的变化,可以通过该题。

http://www.jsqmd.com/news/326935/

相关文章:

  • 基于STM32和FreeRTOS的智能家居设计之路 - 指南
  • C++编译期数组操作
  • 【题解】P14561 [CXOI2025] 我常常追忆过去
  • C++中的享元模式变体
  • 深耕蚌埠 全域运营|三十六行蚌埠分公司解锁本地商户增长新路径
  • 高性能网络协议栈
  • 主频、带宽概念
  • 【题解】P10665 [AMPPZ2013] Bytehattan
  • 【题解】P14610 [NWRRC 2025] Keys and Grates
  • 低延迟系统C++优化
  • 【题解】AT_arc098_c [ARC098E] Range Minimum Queries
  • 【题解】P7974 [KSN2021] Delivering Balls
  • 动态库热加载技术
  • C++中的观察者模式变体
  • 备考锦囊:分享主治考试哪个老师讲得好,点亮通关智慧之光
  • 嵌入式C++安全编码
  • C++中的表达式模板
  • 浅谈莫队
  • 混合储能与并网控制:基于Matlab Simulink的蓄电池与超级电容混合储能系统仿真模型研究
  • 教学风格全解析:考主管护师听哪个老师的课?寻找契合您的领路人。
  • 2026执业药师考试教辅书推荐:三大靠谱教材测评对比,备考就选这一套!
  • 《P4587 [FJOI2016] 神秘数》
  • 十大优秀主管护师老师课程推荐排名
  • 执业药师考试教辅书推荐:口碑排行前五的备考用书,考生看过几本?
  • 详细解释xilinx源语的使用:IDELAYCTRL
  • 探寻临床执业医师资格考试机构,锁定高通过率的良方
  • 2026执业中药师在线课程推荐指南:三大神级课程真实测评,闭眼入不踩坑!
  • 【题解】P10871 [COTS 2022] 皇后 Kraljice
  • 2026执业中药师在线课程怎么选?「口碑王」课程对比,这份推荐够硬核!
  • 深度搜索Agent架构全解析:从入门到进阶,解锁复杂问题求解密码