#4352. Reverse Permutation

    ID: 4352 Type: Default 1000ms 256MiB Tried: 0 Accepted: 0 Difficulty: 3 Uploaded By: Tags>普及/提高-双端队列模拟思维

Reverse Permutation

题目描述

给定整数 NN 和一个由 ox 组成的长度为 NN 的字符串 SS

有一个长度为 NN 的整数序列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N),初始时 A=(1,2,,N)A = (1, 2, \ldots, N)

k=1,2,,Nk = 1, 2, \ldots, N 的顺序,依次对 AA 执行下面的操作:

  • Sk=S_k = o,把 AAkk 项翻转,即把 AA 替换成 $(A_k, A_{k-1}, \ldots, A_1, A_{k+1}, A_{k+2}, \ldots, A_N)$;
  • Sk=S_k = x,什么也不做。

请求出所有操作结束后的 AA

输入格式

N
S

输出格式

在一行中输出最终 AA 的所有元素,相邻两个数之间用一个空格隔开。

输入示例 1

5
ooxoo

输出示例 1

5 2 1 3 4

示例 1 说明

AA 在每次操作后的变化如下:

  • k=1k = 1:翻转前 11 项,A=(1,2,3,4,5)A = (1, 2, 3, 4, 5)(只有一项,翻了等于没翻)。
  • k=2k = 2:翻转前 22 项,A=(2,1,3,4,5)A = (2, 1, 3, 4, 5)
  • k=3k = 3S3=S_3 = x,什么也不做。
  • k=4k = 4:翻转前 44 项,A=(4,3,1,2,5)A = (4, 3, 1, 2, 5)
  • k=5k = 5:翻转前 55 项,A=(5,2,1,3,4)A = (5, 2, 1, 3, 4)

输入示例 2

7
ooooooo

输出示例 2

7 5 3 1 2 4 6

示例 2 说明

每一步都翻转。可以观察到最终结果呈现「奇数从大到小、再接偶数从小到大」的规律。

输入示例 3

15
xooxoxoxoxoxxoo

输出示例 3

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

示例 3 说明

SSox 混杂,共翻转 88 次。可以观察到最终序列里 1515 排在最前面——因为最后一次翻转发生在 k=15k = 15S15=S_{15} = o),把当时排在末尾的 1515 甩到了最前。这正是「最后一次翻转决定首元素」的直观体现。

约束条件

  • 2N5×1052 \le N \le 5 \times 10^5
  • NN 是整数
  • SS 是由 ox 组成的长度为 NN 的字符串