CF1279C Stack of Presents

题目描述

圣诞老人需要给孩子们送礼物。他有一大堆 $n$ 个礼物,编号从 $1$ 到 $n$;最上面的礼物编号为 $a_1$,接下来是 $a_2$,以此类推;最下面的礼物编号为 $a_n$。所有编号互不相同。 圣诞老人有一个需要送出的 $m$ 个不同礼物的清单:$b_1$、$b_2$、...、$b_m$。他会按照清单上的顺序依次送出这些礼物。 每次送礼物时,圣诞老人需要在堆中找到该礼物,方法是移除它上面的所有礼物,取出该礼物,然后将移除的礼物重新放回堆顶。如果目标礼物上方有 $k$ 个礼物,那么他需要花费 $2k+1$ 秒来完成这次操作。幸运的是,圣诞老人可以加快整个过程——每次将移除的礼物放回堆顶时,他可以任意重新排列这些礼物(仅限于那些原本在目标礼物上方的礼物;目标礼物下方的礼物顺序不能改变)。 已知圣诞老人提前知道所有需要送出的礼物清单,并且每次都能最优地重新排列礼物,请问他最少需要多少秒才能送出所有礼物?圣诞老人不能以其他方式改变礼物的顺序,也不能与礼物堆进行其他交互。 你的程序需要回答 $t$ 组不同的测试用例。

输入格式

第一行包含一个整数 $t$($1 \le t \le 100$),表示测试用例的数量。 接下来是 $t$ 组测试用例,每组用三行描述。 第一行包含两个整数 $n$ 和 $m$($1 \le m \le n \le 10^5$),分别表示礼物堆中的礼物数量和圣诞老人需要送出的礼物数量。 第二行包含 $n$ 个整数 $a_1, a_2, ..., a_n$($1 \le a_i \le n$,所有 $a_i$ 互不相同),表示礼物堆中礼物的顺序。 第三行包含 $m$ 个整数 $b_1, b_2, ..., b_m$($1 \le b_i \le n$,所有 $b_i$ 互不相同),表示圣诞老人需要送出的礼物清单,按顺序给出。 所有测试用例中 $n$ 的总和不超过 $10^5$。

输出格式

对于每个测试用例,输出一个整数,表示在每次最优重新排列礼物的情况下,圣诞老人送出所有礼物所需的最少秒数。

说明/提示

由 ChatGPT 4.1 翻译