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

题解:P14058 【MX-X21-T3】[IAMOI R5] 两个人的演唱会

先特判这个环本身极差就不超过 \(m\) 的情况(此时答案为 \(1\))。

原问题在环上,不是很好解决,先考虑解决一个更简单的问题:

小 R 有一个长度为 \(n\) 的,由正整数组成的 \(a_1,\dots,a_n\),她要你将这个切成若干段,使得所有段的段内极差都小于等于 \(m\),求分成的最少段数。

这是一个经典的贪心问题。显然,在所有切法中,每次切出最长的极差不超过 \(m\) 的前缀一定不劣。使用双指针维护,动态维护左右指针中间部分的最大值和最小值即可。

现在问题被转化为,我们应该在何处将环断为链,才能得到最优答案。乍一看确实无从下手,因此想到考虑环上的一些“特殊”位置。

考察任意一个最小值位置 \(a_x\),取出它所在的段,那么这一段的极差不超过 \(m\),等价于段内任意一个 \(a_y\) 都满足 \(a_y\le a_x+m\)。符合要求的极长段是唯一的,也就是说,对于任意一种合法的切分方式,\(a_x\) 所在的段都一定包含于这个极长段之中。根据贪心的思想,切出这一极长段一定不劣。

切出这一段后,剩下的部分自然断成了一条链,使用前面提到的双指针即可求出答案。

时间复杂度 \(O(\sum n)\)

//By: OIer rui_er
#include <bits/stdc++.h>
#define rep(x, y, z) for(int x = (y); x <= (z); ++x)
#define per(x, y, z) for(int x = (y); x >= (z); --x)
#define debug(format...) fprintf(stderr, format)
#define fileIO(s) do {freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);} while(false)
#define endl '\n'
using namespace std;
typedef long long ll;const int N = 3e7 + 5;int T, n, m, a[N];int main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);for(cin >> T; T; --T) {cin >> n >> m;rep(i, 0, n - 1) cin >> a[i];if(*max_element(a, a + n) - *min_element(a, a + n) <= m) {cout << 1 << endl;continue;}int argmin = min_element(a, a + n) - a;int pl = argmin, pr = argmin;auto pre = [&](int x) {return (x + n - 1) % n;};auto nxt = [&](int x) {return (x + 1) % n;};while(a[pre(pl)] - a[argmin] <= m) pl = pre(pl);while(a[nxt(pr)] - a[argmin] <= m) pr = nxt(pr);int ans = 1, p = nxt(pr), mx = a[p], mn = a[p];while(p != pl) {chkmax(mx, a[p]);chkmin(mn, a[p]);if(mx - mn > m) {++ans;mx = mn = a[p];}p = nxt(p);}cout << ans + 1 << endl;}return 0;
}
http://www.hskmm.com/?act=detail&tid=14833

相关文章:

  • 深入解析Wallarm安全边缘:API边缘的即时防护技术
  • 字符串
  • 总线的概念以及分类
  • A Great Beginning
  • 邮件系统的未来趋势:技术革新与智能化的未来
  • docker volume使用
  • 52805 JLINK 端口保护机制硬件保护具体流程分析;
  • 构建你的 MCP 能力层:.NET 9 + SK 的系统方案
  • pl/sql使用
  • PLC中的运动控制 - (二)基本控制指令MC_Power,MC_Stop,MC_Halt
  • FOC之电机模型
  • 使用shell脚本一键部署docker及docker-compose环境
  • paddleOCR 图片识别
  • 使用命令行powershell修改系统变量
  • 数据全生命周期安全建设方案推荐:双轮驱动架构的实践与创新
  • 赋能智慧水利:国标GB28181平台EasyGBS在农业水文监控中的落地实践
  • VS依赖项显示黄色感叹号、红色叉叉,NU1101找不到包异常情况处理方案
  • 噬菌体展示技术原理深度解析:从基因型-表型偶联到亲和筛选的核心逻辑
  • AT_arc197_e [ARC197E] Four Square Tiles
  • 不限速网盘盘点,五款免费网盘综合对比
  • 日记2
  • RTK精度和时间 - MKT
  • LeetCode-100.相同的树
  • ubuntu安装minio并切换数据存储目录
  • 学习笔记508— 威联通安装使用Zerotier One
  • Java 语法糖大揭秘:让代码更甜更高效的幕后功臣 - 教程
  • Linux命令
  • 树上莫队
  • 比余额宝收益高的低风险短期理财工具-银行同业存单
  • 陇剑杯2025 决赛-ShellDecoder