#P15930. [Roi2019 Regional]仓库自动化

[Roi2019 Regional]仓库自动化

某公司正在进行仓库自动化改造。仓库中有 nn 种商品,编号为 11nn,每种商品存放在一个单独的房间中,商品 ii 存放在编号为 ii 的房间。

一个特殊机器人负责处理从仓库取货的请求。机器人要进入房间,需要使用对应房间的电子卡。所有电子卡按顺序放在机器人的卡槽中,机器人只能取出最上面的卡。

取出的卡可以被机器人放回卡槽中的任意位置:最上方、任意两张卡之间,或者最下方。

为了打开某个房间,机器人会不断取出卡并把它们放回卡槽,直到目标房间的卡位于最上方。然后机器人取出这张卡,用它打开房间,再将这张卡放回卡槽。如果为了打开该房间,机器人总共取出了 xx 张卡,包括最终用于开门的那张卡,则称机器人进行了 xx 次动作。

一天开始时,机器人收到一个取货订单,要求依次取出 mm 件商品:

a1,a2,,am.a_1,a_2,\ldots,a_m.

机器人必须严格按照这个顺序取货。初始时,卡槽中从上到下的卡顺序为:

b1,b2,,bn.b_1,b_2,\ldots,b_n.

每个房间恰好有一张卡。

机器人可以自行选择每次将取出的卡放回卡槽的哪个位置。请最小化完成整个订单所需的动作总数,并输出一种达到最优的放回方案。

输入格式

第一行包含两个整数 n,mn,m

1n,m3105.1\le n,m\le 3\cdot 10^5.

第二行包含 mm 个整数:

a1,a2,,am(1ain),a_1,a_2,\ldots,a_m\quad (1\le a_i\le n),

表示需要依次取出的商品类型。

第三行包含 nn 个互不相同的整数:

b1,b2,,bn(1bin),b_1,b_2,\ldots,b_n\quad (1\le b_i\le n),

表示初始卡槽中从上到下的卡顺序。

输出格式

第一行输出一个整数 kk:完成订单所需的最小动作数。

接下来输出 kk 个整数。对于机器人每一次取出的卡,输出它应被放回卡槽的位置:

  • 若放回最上方,输出 11
  • 若放在一张卡之后,输出 22
  • 依此类推;
  • 若放回最下方,输出 nn

如果存在多种最优方案,输出任意一种。

样例 1 输入

1 1
1
1

样例 1 输出

1
1

样例 2 输入

4 5
4 1 2 4 4
4 3 2 1

样例 2 输出

7
4 4 2 4 4 1 4

样例 3 输入

2 2
1 2
2 1

样例 3 输出

3
2 2 2

样例说明

样例 2 中,卡槽变化如下:

动作 操作前卡槽 取出的卡 打开的房间 放回位置 操作后卡槽
1 4, 3, 2, 1 4 4 3, 2, 1, 4
2 3, 2, 1, 4 3 - 2, 1, 4, 3
3 2, 1, 4, 3 2 2 1, 2, 4, 3
4 1, 2, 4, 3 1 4 2, 4, 3, 1
5 2, 4, 3, 1 2 4, 3, 1, 2
6 4, 3, 1, 2 4 1
7 4 3, 1, 2, 4

子任务

子任务 分值 限制 依赖 检查信息
1 5 1n,m5104, n=m1\le n,m\le 5\cdot 10^4,\ n=m,且对所有 iiai=bia_i=b_i - 完全反馈
2 10 1n,m5104, n=m1\le n,m\le 5\cdot 10^4,\ n=m,且对所有 iiai=bni+1a_i=b_{n-i+1}
3 31 1n,m20001\le n,m\le 2000 第一错误
4 14 1n,m51041\le n,m\le 5\cdot 10^4,所有 aia_i 互不相同 1, 2
5 1n5104, 1m1051\le n\le 5\cdot 10^4,\ 1\le m\le 10^5 1, 2, 3, 4
6 26 1n,m31051\le n,m\le 3\cdot 10^5 1, 2, 3, 4, 5