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

P8087 『JROI-5』Interval 题解

题外话:写之前看了一下题解发现我怎么和官方题解一模一样

首先看题.

题意很简单,就是在 \(n\) 的一个排列中找到一段区间满足 \(f_{r-l+1}<Mex({l,r})\) 注意这里的Mex和平时的mex定义不太一样

其中 \(f_i\) 为给定的常数

观察题目所给的式子,不难发现 \(r-l+1\) 其实就是区间长度

那么根据 \(Mex\) 的定义我们可以得出一个结论: \(f_{len}\le len\) 原因很简单,如果不然就算我们将这个区间换为 \(1,2,3...len\)

的话 \(Mex\) 还是无法满足题目中的限制条件.在代码中体现为 if(f[i]>i)continue;

处理了这种情况后,我们开始思考究竟应该怎么样去确定这个区间 \([l,r]\) .

由于左右端点我们均无法确定,于是我们开始思考这个 \(f_i\) 究竟应该如何使用.

就在我们苦思冥想的时候 \(f_i\) 中的 \(i\)区间长度并且答案要求输出最小区间长度再次提醒了我们,可能这道题需要使用这个区间长度,从而确定这个区间.

然后我们考虑怎么找到一个 \(Mex\) 大于 \(f_i\) 并且长度不超过 \(i\) 的区间.

发现其实我们需要的不过是 \(1\to i\) 中在原序列中最小和最大的下标这个下标所对应的区间就是我们想要的, 只需要将这个区间长

度和 \(f_i\) 对比即可.

于是我们就恍然大悟了:

定义 \(mi_i\) 表示 \(1 \to i\) 中在原序列下标的最小值

定义 \(ma_i\) 表示 \(1 \to i\) 中在原序列下标的最大值

这里由于原序列是一个 \(n\) 的排列,我们也不用担心下标越界的问题

所以对于每一个 \(i\) 我们只需要判断 \(ma_{f_i}-mi_{f_i}+1\)\(i\) 的大小即可.

若上式小于 \(i\) 则可行.反之则 \(i\) 不是我们想要的答案

至此本题被我们成功地解决啦233.

代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
const int N=4e6+5;
const int INF=2147483647;
int n,a[N],pos[N],f[N],ans,mi[N],ma[N];int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);pos[a[i]]=i;}mi[0]=INF;for(int i=1;i<=n;i++){mi[i]=min(mi[i-1],pos[i]);ma[i]=max(ma[i-1],pos[i]);}for(int i=1;i<=n;i++)scanf("%d",&f[i]);for(int i=1;i<=n;i++){if(f[i]>i)continue;if(ma[f[i]]-mi[f[i]]+1<=i){ans=i;break;}}printf("%d\n",ans);return 0;
}

后记:scanf真的比快读慢了好多,以后这种大输入量的题记得使用快读.

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

相关文章:

  • PyTorch 张量与自动微分完全指南:从核心概念到实战训练
  • 小白的第一次edusrc挖洞经历分享
  • 掌握nvim-tree.lua正则表达式:5个高级文件过滤技巧让你的Neovim文件管理效率翻倍
  • 如何通过MiPad5-Drivers开源驱动实现跨系统适配?设备转型与性能优化指南
  • Apollo GraphQL完全指南:从零开始构建现代化应用
  • FanControl智能配置指南:从噪音困扰到散热大师的转型方案
  • 2026年4月二合一粘结测定仪公司推荐,实测表现大揭秘,高精度微机全自动量热仪/全自动测硫仪,测定仪源头厂家推荐 - 品牌推荐师
  • NorthwindTraders缓存优化终极指南:Redis vs 内存缓存性能大比拼
  • ffmpeg转换格式
  • AlertKit完全指南:如何在iOS应用中实现Apple原生风格弹窗
  • 如何高效管理全面战争MOD:虎符台/Legion Seal终极指南
  • 从xcode-install到xcodes:项目迁移指南与版本管理工具演进
  • RPG Maker解密工具终极指南:快速提取游戏资源与素材
  • Simditor插件开发终极指南:如何快速创建自定义按钮和功能
  • PHP网关TLS1.3握手失败率高达37%?实测对比BoringSSL vs OpenSSL 3.0.12在PLC通信网关中的握手兼容性矩阵
  • Onyx:开源AI平台,让每个团队都能拥有强大AI助手
  • 五分钟快速上手PPTist:打造专业级在线演示文稿的终极指南
  • 第三次作业 网络嗅探与协议分析
  • DeepTutor智能复习系统:基于遗忘曲线的高效复习策略终极指南
  • [LitCTF 2024]ezrc4
  • AudioCLIP终极指南:如何用单一模型实现文本、图像和音频的跨模态理解
  • Balloon.css 终极更新指南:从1.0到1.2.0版本的核心特性变化详解
  • Awesome AI for Science项目详解:如何用AI解决科学难题
  • 数据库迁移如何提升结果验证能力:NineData社区版4.10.0支持9条异构数据库复制与对比链路
  • 微信聊天记录备份:数字时代的数据主权与记忆守护之道
  • OpenSSF Scorecard终极指南:10步快速识别开源项目安全漏洞
  • Simditor主题定制终极指南:5步Sass打造专属编辑器样式
  • PHP 8.4+ 异步I/O性能翻倍实测:从阻塞到非阻塞的7大重构步骤,附压测对比数据(QPS提升327%)
  • Ono社区生态:如何贡献代码和参与开源项目发展
  • 接口测试——pytest框架续集粗