Problem 2322 开普勒表示

TimeLimit:2000MS  MemoryLimit:262MB
64-bit integer IO format:%I64d
未提交 | 登录后收藏
Problem Description

我们可以从一个排列计算其开普勒表示,由排列a1,2,...,n计算其开普勒表示K1,2,...,n,方法如下:

建立n个带编号的点,编号为1,2,...,n,初始没有边。

连有向边i → ai,i ∈ [1,n]。

由于a是一个排列,那么这个有向图必然由若干个有向圈构成,注意这里圈长可能为1,即可能出现自环。

对每个圈,从任意一个点出发,沿着边方向,遍历一遍(不重复访问点),按照顺序写下访问到的点编号,并加括号,如:(2,5,3,4,9)表示一个圈2 → 5 → 3 → 4 → 9 → 2,当然表示不唯一,例如(3,4,9,2,5)。

将所有圈的表示放在一起,此时圈与圈的相对顺序可以任意,例如:(7,8,10,9)(1,5,3)(4,2)(6)

将每个圈旋转到以圈内最大值开头,例如:(10,9,7,8)(5,3,1)(4,2)(6)。

确定圈与圈之间的顺序,以圈内最大值为关键字,从小到大排列:(4,2)(5,3,1)(6)(10,9,7,8)

去掉括号,得到开普勒表示:4 2 5 3 1 6 10 9 7 8。

Input

多组测试数据,每组测试数据中:

第一行包含一个整数op。

第二行包含一个整数n,1<= n <= 2 * 10^6。

第三行包含n个数,表示1到n的排列。

op=1时读入一个排列表示a。

op=2时读入一个排列表示K。

Output

对于每组测试数据:

op=1时输出一行表示K。

op=2时输出一行表示排列a,不存在输出-1。

SampleInput
1
10
9 10 5 7 2 4 1 8 6 3
SampleOutput
8 9 6 4 7 1 10 3 5 2
Submit
题目统计信息详细
总AC数0
通过人数0
尝试人数0
总提交量0
AC率0.00%
AC该题后可以添加标签
贴完标签可以获得20ACB。
并且可以获得本题所有提交代码查看权限。
点击标题可以显示标签。
如果你还没认真思考过这题,请不要查看标签
如果您已经通过了该题,请务为该题贴上标签

T^T Online Judge

[BUG反馈] [FAQ] [闽ICP备17026590号-1]
当前版本:3.24 系统时间: