当前位置: 首页 > 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.rkmt.cn/news/10379.html

相关文章:

  • 深入解析Wallarm安全边缘:API边缘的即时防护技术
  • A Great Beginning
  • 邮件系统的未来趋势:技术革新与智能化的未来
  • python-uv入门使用 - 教程
  • docker volume使用
  • pl/sql使用
  • PLC中的运动控制 - (二)基本控制指令MC_Power,MC_Stop,MC_Halt
  • 使用命令行powershell修改系统变量
  • 赋能智慧水利:国标GB28181平台EasyGBS在农业水文监控中的落地实践
  • 陇剑杯2025 决赛-ShellDecoder
  • Springcloud gateway笔记
  • 网易NDH大数据平台使用经验
  • ncpa.cpl 意义 这个名称的
  • sql统计一个字段各个值各有多个个的方法
  • 智启新程:哲讯科技引领SAP ERP实施新范式
  • 移动端性能监控探索:鸿蒙 NEXT 探针架构与技术实现
  • 哲讯科技:以数智之力,铸就企业SAP ERP实施新典范
  • 【CVCVCV】GAN代码解析
  • SystemVerilog 代码风格指南
  • 赋能智慧化工:无锡哲讯科技SAP解决方案,构筑安全、合规与高效的数字新底座
  • lmhosts和hosts的时效
  • 芯之所向,智造未来:无锡哲讯科技赋能芯片行业的高效管理与数字革新
  • UART、I2C、SPI:三种常见通信协议的区别
  • 对接全球股票市场K线数据实战
  • 完整教程:数据分析报告的写作流程
  • Qt - 音频采集程序
  • 洛谷P10288 [GESP样题 八级] 区间
  • AI 时代下,开发流程的重塑:从“代码先行”到“文档驱动”
  • (二)若依前后端分离版本二次开发 代码生成、目录添加、数据字典维护
  • C#与Access数据库操作简易指南:增删改查及类封装