题目描述
译自 ROI Regional 2019 Day1 T3. Автоматизация склада
公司正在进行仓库自动化。仓库里存放着 n 种商品,编号从 1 到 n,每种商品存放在一个独立的房间里。编号为 i 的商品存放在编号为 i 的房间里。
一个专用机器人负责处理从仓库取货的请求。机器人使用特殊的电子卡片来访问仓库的房间。卡片存放在机器人的一个专用槽中,机器人可以从槽中取出顶部的卡片。取出的卡片可以放回槽中的任意位置:顶部、任意两张卡片之间或最底部。
为了打开房间,机器人按以下步骤操作。它从槽中取出卡片并放回槽中,直到顶部的卡片是它需要的房间的卡片。然后,取出这张卡片,使用它打开房间,并将其放回槽中。如果机器人总共取出了 x 张卡片(包括最终打开房间的那张),我们说机器人为了打开房间进行了 x 次操作。
在工作日开始时,机器人接到了一个订单,需要取出 m 件商品:a1,a2,…,am。机器人必须按这个顺序取出商品。为此,它依次执行以下操作:打开存放当前商品的房间,取出商品,关闭房间并将商品交给客户。然后,机器人继续取出下一个商品。
最初,电子卡片按以下顺序从上到下放在槽中:b1,b2,…,bn。每个房间的卡片在槽中恰好有一张。
取出商品所需的时间取决于机器人总共需要从槽中取出多少次卡片,以找到当前房间的卡片。需要选择机器人放回取出卡片的位置,以最小化机器人打开房间的总操作次数。
编写一个程序,根据给定的整数 n 和 m,商品的取出顺序 a1,a2,…,am 以及卡片在槽中的初始位置 b1,b2,…,bn,确定机器人需要进行的最小操作次数,以按顺序打开所有房间。对于每次取出的卡片,还需要指明将其放回的位置,以实现最优操作次数。
输入格式
第一行输入包含两个整数 n 和 m (1≤n,m≤3⋅105),表示商品种类数和需要从仓库取出的商品数。
第二行包含 m 个整数 a1,a2,…,am (1≤ai≤n),表示需要按顺序取出的商品种类。
第三行包含 n 个不同的整数 b1,b2,…,bn (1≤bi≤n),表示卡片在槽中的初始顺序,从上到下排列。
输出格式
第一行应包含一个整数 k,表示机器人需要进行的最小操作次数。
接下来输出 k 个整数。对于机器人的每次操作,输出一个整数,表示将取出的卡片放回槽中的位置。如果卡片放在最上面的位置,输出 1;如果放在一张卡片之后,输出 2,以此类推,最底部的位置输出 n。
如果有多种方法可以最小化总操作次数,输出其中任意一种。
1 1
1
1
1
1
4 5
4 1 2 4 4
4 3 2 1
7
4 4 2 4 4 1 4
在第二个样例中,机器人的卡片槽中的卡片移动如下:
| 操作 |
操作前 |
取出的卡片 |
打开的房间 |
卡片放回的位置 |
操作后 |
| 1 |
4,3,2,1 |
4 |
4 |
4 |
3,2,1,4 |
| 2 |
3,2,1,4 |
3 |
- |
4 |
2,1,4,3 |
| 3 |
2,1,4,3 |
2 |
- |
2 |
1,2,4,3 |
| 4 |
1,2,4,3 |
1 |
1 |
4 |
2,4,3,1 |
| 5 |
2,4,3,1 |
2 |
2 |
4 |
4,3,1,2 |
| 6 |
4,3,1,2 |
4 |
4 |
1 |
4,3,1,2 |
| 7 |
4,3,1,2 |
4 |
4 |
4 |
3,1,2,4 |
2 2
1 2
2 1
3
2 2 2
数据范围与提示
详细子任务附加限制及分值如下表所示。
| 子任务 |
分值 |
附加限制 |
子任务依赖 |
| 1 |
5 |
1≤n,m≤5⋅104,n=m, 对所有 i,ai=bi |
|
| 2 |
10 |
1≤n,m≤5⋅104,n=m, 对所有 i,ai=bn−i+1 |
| 3 |
31 |
1≤n,m≤2000 |
| 4 |
14 |
1≤n,m≤5⋅104,所有 ai 不同 |
1,2 |
| 5 |
14 |
1≤n≤5⋅104,1≤m≤105 |
1,2,3,4 |
| 6 |
26 |
$1 \leq n \leq 3 \cdot 10^{5}, 1 \leq m \leq 3 \cdot 10^{5}$ |
1,2,3,4,5 |