AT_arc044_d.[ARC044D] suffix array

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

高桥君非常喜欢后缀数组的构建算法。他每天都会实现各种各样的后缀数组构建算法来玩。不过,高桥君构建了太多的后缀数组,已经感到厌倦了。因此,他决定,对于给定的一个排列,要求出一个仅由大写英文字母组成的、字典序最小的字符串,使得该字符串的后缀数组恰好等于给定的排列。

这里,给定两个字符串 X1,X2,…,XsX_1,X_2,\ldots,X_s 和 Y1,Y2,…,YtY_1,Y_2,\ldots,Y_t,我们定义 X<YX < Y(即 XX 的字典序小于 YY)当且仅当满足以下两个条件之一:

  • 存在某个整数 i (1≤i≤min⁡(s,t))i\ (1 \leq i \leq \min(s,t)),使得对于任意 j (1≤j≤i−1)j\ (1 \leq j \leq i-1) 都有 Xj=YjX_j=Y_j,且 Xi<YiX_i < Y_i;
  • 对于任意 i (1≤i≤min⁡(s,t))i\ (1 \leq i \leq \min(s,t)) 都有 Xi=YiX_i=Y_i,且 s<ts < t。

对于给定的字符串 SS,其后缀数组定义为:对于每个 ii,枚举从 SS 的第 ii 个字符到末尾的所有后缀字符串,将这些后缀按字典序排序,然后输出这些后缀在原字符串中的起始位置 ii 的排列。例如,字符串 ABACABAABACABA 的后缀数组为 [7,5,1,3,6,2,4][7,5,1,3,6,2,4]。

现在给定一个长度为 NN 的排列,请你求出一个仅由大写英文字母组成的、字典序最小的字符串,使其后缀数组等于该排列。如果不存在这样的字符串,则输出 −1-1。

输入格式

输入通过标准输入给出,格式如下:

NN
A1 A2 … ANA_1\ A_2\ \ldots\ A_N

  • 第 11 行包含一个整数 N (1≤N≤106)N\ (1 \leq N \leq 10^6)。
  • 第 22 行包含一个长度为 NN 的整数序列 A1,…,AN (1≤A1,…,AN≤N)A_1,\ldots,A_N\ (1 \leq A_1,\ldots,A_N \leq N),保证这 NN 个整数两两不同。

输出格式

输出一个仅由大写英文字母组成的、字典序最小的字符串,使其后缀数组等于给定的排列 A1,…,ANA_1,\ldots,A_N。如果不存在这样的字符串,则输出 −1-1。

输出末尾需要换行。

输入输出样例

  • 输入#1

    7
    7 5 1 3 6 2 4

    输出#1

    ABACABA
  • 输入#2

    12
    7 1 9 10 2 4 3 6 12 5 11 8

    输出#2

    BDEDGFAHCCGG

说明/提示

样例解释 1

满足条件的字符串还有 CXHZBWACXHZBWA 等,但字典序最小的是 ABACABAABACABA,因此输出 ABACABAABACABA。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页