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

20250810 XYD 010 T4

题面

image

思路

首先,对于这种求第 \(k\) 大的题目一般都可以考虑二分答案,那么对于 Check 就是找当前答案的排名。对于找排名,我们尝试对与每一个右端点,维护多少个做端点可以使得这个区间的平均值为 \(mid\)。形式化地,我们枚举每一个 \(i\),并统计有多少个 \(j\) 满足 \(j < i\)\(\frac{sum[i] - sum[j - 1]}{i - j + 1} = mid\),看上去很难维护,实际上可以进行一些转化。

\[\frac{sum[i] - sum[j - 1]}{i - j + 1} = mid \]

\[sum[i] - sum[j - 1] = mid \times (i - j + 1) \]

\[sum[i] - sum[j - 1] = mid \times i - mid \times j + mid \]

\[sum[i] - mid \times i = sum[j - 1] - mid \times (j - 1) \]

这样就变得好做了(其实就是 \(i, j\) 放到等号两边,一般都可以这样化式子来对其进行数据结构的维护),我们可以用 BIT 简单维护一下。

但这样是 \(log^2\) 的,不能过。

对于这种求第 \(k\) 大的题目还有一种套路,就是在 \(k\) 较小的情况下,用优先队列来维护答案,使得地 \(t\) 次取出的答案就是第 \(t\) 小的答案,然后对当前状态进行一些调整得到后面的状态。这样做的好处是可以将前 \(k\) 的值都枚举到,他的核心就枚举前 \(k\) 小。对于一个题目能否这样做,最主要的就是看这样的调整是否存在。

如果把上式的形式看作是一个一次函数,则两条函数的交点的横坐标就是这个区间的平均值,则我们要找这些函数的从左到右的第 \(k\) 个交点。由于 \(k < 1e5\),所以考虑按上述方法枚举每一个平均值。对于一个确定的自变量,每个函数都对应了一个点,或说是一个纵坐标。那么,可以证明,下一个交点一定是此时某两个相邻的点所代表的函数的交点(因为一开始,斜率是单减的)。于是我们可以用优先队列来维护相邻直线的交点,调整就是交换两条直线的顺序并考虑新加入的相邻。

对于去重:unordered_map,但要手写一个较为高效的 hash 函数

http://www.rkmt.cn/news/2535.html

相关文章:

  • Pollard Rho 分解质因数
  • [豪の学习笔记] 软考中级备考 基础复习#7
  • 十、微程序控制器是什么?
  • 2023CCPC秦皇岛站
  • 11
  • 六、数据通路的功能和基本结构
  • 八、CPU控制器的功能和工作原理
  • Linux命令实践
  • Tkinter 多线程并行任务开发:从秒数丢失到完整显示的踩坑与解决
  • AI 机器视觉检测方案:破解食物包装四大质检难题,筑牢食品安全防线
  • NKOJ全TJ计划——NP1397
  • Window10 关闭Edge浏览器的多选项卡通过Alt+Tab组合键切换的方式
  • 华为鸿蒙(4.0)应用开发(4)—ArkTs开发语言 – 每天进步一点点
  • 2025ICPC网络赛第一场题解
  • .net连接MYSQL数据库字符串参数详细解析(总结)
  • The 3rd Universal Cup. Stage 37: Wuhan
  • Mysql 事务提交回滚退回
  • 鸿蒙前端开发3-ArkTS语言基本语法
  • solo博客容器化运行访问
  • 动态规划DP问题详解,超全,思路全收集
  • SQL入门与实战
  • AI编程⑤:【Cursor保姆级教程】零基础小白从安装到实战,手把手教你玩转AI编程神器!
  • 开发效率翻倍!编码助手+云效 AI 评审如何破解代码质量与速度难题?
  • ai本地部署工具有哪些?新手入门AI推荐这几个
  • 完整教程:HDFS基准测试与数据治理
  • var code = 76cb2b4f-5a26-4a70-a3bf-dc8f2ae5162f
  • 【9月19日最终截稿,SPIE出版】2025年信息工程、智能信息技术与人工智能国际学术会议(IEITAI 2025)
  • Linux redis 8.2.1源码编译
  • 202003_MRCTF_千层套娃
  • [WPF学习笔记]多语言切换-001