欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1638A.Reverse
Reverse
题目描述
给定一个长度为 的排列 。你需要选择两个整数 (),并将排列的子区间 反转。反转后的排列为 $p_1, p_2, \dots, p_{l-1}, p_r, p_{r-1}, \dots, p_l, p_{r+1}, p_{r+2}, \dots, p_n$。
请你找出通过恰好一次反转操作能够得到的字典序最小的排列。
注意,对于两个长度相同且不同的排列 和 ,如果在第一个不同的位置, 的元素小于 的元素,则 的字典序小于 。
排列是一个由 到 的 个互不相同的整数组成的数组。例如, 是一个排列,但 不是排列( 在数组中出现了两次), 也不是排列(,但数组中有 )。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 (),表示测试数据的组数。接下来是每组测试数据的描述。
每组测试数据的第一行包含一个整数 (),表示排列的长度。
第二行包含 个整数 (),表示排列的元素。
输出格式
对于每组测试数据,输出通过恰好一次反转操作能够得到的字典序最小的排列。
说明/提示
在第一个测试用例中,排列长度为 ,因此唯一可能的区间是 。反转后的排列为 。
在第二个测试用例中,通过反转区间 可以得到升序排列。反转后的排列为 。
在第三个测试用例中,最优的区间是 。反转后的排列为 。
在第四个测试用例中,没有更小的字典序排列,因此可以选择区间 ,保持不变。反转后的排列为 。
由 ChatGPT 4.1 翻译
样例
4
1
1
3
2 1 3
4
1 4 2 3
5
1 2 3 4 5
1
1 2 3
1 2 4 3
1 2 3 4 5
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |