CF451B Sort the Array
题目描述
作为一名程序员,你非常喜欢数组。在你生日时,你的朋友们送给你一个由 $n$ 个互不相同的整数组成的数组 $a$。
不幸的是,数组 $a$ 的大小太小了。你想要一个更大的数组!你的朋友们同意只要你能够正确回答下面这个问题,他们就会给你一个更大的数组:是否可以通过**仅反转 $a$ 的一个连续子段**,就将数组 $a$ 按升序排列?相关术语的定义见下方说明。
输入格式
输入的第一行包含一个整数 $n$($1 \leq n \leq 10^{5}$),表示数组 $a$ 的大小。
第二行包含 $n$ 个**互不相同**的用空格分隔的整数:$a[1],a[2],...,a[n]$($1 \leq a[i] \leq 10^{9}$)。
输出格式
如果可以通过反转 $a$ 的某一连续子段使数组有序,请输出 "yes"(不带引号), 并在下一行输出两个空格分隔的整数,表示要反转的子段的起止下标(下标从 1 开始,且 start 不能大于 end)。如果有多种选法,请输出其中任意一种。
如果无法通过反转任意一段得到升序数组,则输出 "no"(不带引号)。
说明/提示
样例 1:你可以反转整个数组得到 $[1,2,3]$,该数组已按升序排列。
样例 3:不存在可以反转使数组升序的子段。
**术语说明**
- 数组 $a$ 的一个子段 $[l,r]$ 是指 $a[l],a[l+1],...,a[r]$ 这一连续的元素序列。
- 如果你有一个大小为 $n$ 的数组 $a$ ,对其子段 $[l,r]$ 反转,得到的新数组如下:
$$
a[1],a[2],...,a[l-2],a[l-1],a[r],a[r-1],...,a[l+1],a[l],a[r+1],a[r+2],...,a[n-1],a[n].
$$
由 ChatGPT 5 翻译