题库练习 「JSOI2019」节日庆典
← 上一题 下一题 →

A5856 | 「JSOI2019」节日庆典

时间限制1s
内存限制1024MB
通过 / 提交0/0

题目描述

#### 题目背景
JYY 和探险队顺利完成了火星上的任务。在离开前,探险队正好赶上了火星人一年一度最盛大的节日「气球节」。然而,火星人遇到了每年一度的麻烦:怎样最美观地摆放气球。JYY 决定请你设计算法帮助火星人解决这个问题。

#### 题目描述
在庆典开始前,火星人会把气球准备好并串在一根绳子上。气球按顺序排列可以看成是一个由小写字母组成的长度为 $n$ 的字符串 $S$。然后,火星人会按照字符串的顺序逐个把气球加入到一个庆典的圆环上,并且表演一个节目庆祝。

下图展示了一串气球 cbbadbcd 在进行到第 $5$ 个节目时的情形,此时在庆典环上的气球是 cbbad

![balloons.png](/uploads/acgo/image/82c1181fdc1f839f_26ccea4cd443.png)

为了让每个节目都更好看,火星人希望在每个节目开始前调整气球在环上的顺序,使得每个节目的气球排布都最美观。对于一组气球(一个字符串),火星人认为最美观的字符串是庆典圆环上按绳子方向读出**字典序最小的字符串**,例如对于 cbbad,共有 $5$ 个读出字符串的位置:

- cbbad ($i=1$);
- bbadc ($i=2$);
- badcb ($i=3$);
- adcbb ($i=4$);
- dcbba ($i=5$)。

如果有多个字典序最小的字符串,火星人希望找出**离绳头最近**的那个(即$i$最小的那个)。更严谨地说,对于字符串$T$,定义

$$T_i = T[i\ldots |T|] :: T[1\ldots i-1]\ (1\le i \le |T|)\textrm{,}$$

其中 $::$ 是字符串的拼接操作。定义 $f(T)$ 为最小的 $i$($1\le i \le |T|$)满足 $T_i = \min\{T_1,T_2,\ldots,T_{|T|}\}$。

JYY希望你帮助他设计一个算法,让火星人每个节目的气球排列都最美观,即对于给定字符串 $S$ 的每一个前缀 $S[1\ldots i]$($1\le i \le |S|$),求出$f(S[1\ldots i])$。

输入格式

输入只有一行,该行包括一个字符串 $S$。

输出格式

在一行中对于每个 $i$($1\le i\le |S|$),输出一个整数 $f(S[1\ldots i])$。输出的数字之间以空格分隔。

输入输出样例

输入 #1
abaacaba
输出 #1
1 1 3 3 3 6 3 8
C++ 编辑器
输入
输出