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 翻译