CF1155A.Reverse a Substring

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Reverse a Substring

题目描述

给定一个仅含小写字母的字符串ss,其长度为nn

我们定义子串为一个字符串中连续的一段,比如acababacaba的子串(位置是3~6),而aad不是。所以对于一个字符串ss,它的位置为[l,r][l,r]的子串可以表示成s[l;r]s[l;r],即slsl+1...srs_ls_{l+1}...s_r

您需要指定ss一个子串并翻转这个子串,使得新字符串的字典序比原来的字符串ss小。注意不是最小。

如果可以满足题意,输出YES,再输出反转的区间。否则输出NO

我们认为字符串x<yx<y当且仅当存在一个 ii (1imin(x,y))(1 \leq i\leq min(|x| ,|y|)),使得 xi<yix_i < y_i 并且xj=yj(1j<i)x_j =y_j (1 \leq j < i) 此处的绝对值符号|x| 指的是字符串长度。在某些语言中您可以用 << 运算符比较字符串字典序

输入格式

第一行一个整数 n(2n3×105)n(2\leq n \leq 3\times10^5) ,表示字符串ss的长度

第二行一个仅含小写字母的字符串ss

输出格式

如果可以通过翻转一个子串得到字典序更小的字符串,输出YES,换行,再输出反转的区间(如果有多种方案仅输出一个)。否则仅输出NO

说明/提示

样例11中,翻转后的字符串是aacabba

样例

7
abacaba
YES
2 5
6
aabcfg
NO

在线编程 IDE

建议全屏模式获得最佳体验