9519.切排列

Time Limit: 3s Memory Limit: 512MB

给出两个 $1 \sim n$ 的排列 $A_1, A_2, \ldots, A_n$ 与 $B_1, B_2, \ldots, B_n$。你的任务是将 $A$ 排列变成 $B$ 排列。你可以将第一个排列切成 $k$ 段,并将这 $k$ 段按照任意顺序拼起来,从而得到一个新的排列。

求出 $k$ 最小可以是多少。

注:$1 \sim n$ 的排列是指每个数都恰好出现一次的序列,例如 $[1,5,3,4,2]$ 是 $1 \sim 5$ 的一个排列,而 $[1,2,2], [3,4,1]$ 都不是排列。

Input Format(From the terminal/stdin)

第一行一个正整数 $T$($1 \le T \le 10^4 + 5$),表示数据组数。

对于每一组数据,第一行一个正整数 $n$($1 \le n \le 2 \cdot 10^5$),表示排列长度。第二行输入 $A_1, A_2, \ldots, A_n$。第三行输入 $B_1, B_2, \ldots, B_n$。数据保证 $A_1, A_2, \ldots, A_n$ 与 $B_1, B_2, \ldots, B_n$ 都是 $1 \sim n$ 的一个排列。

对于单个测试点,$\sum n \le 5 \cdot 10^5 + 16$。

Output Format(To the terminal/stdout)

对于每一组数据,输出一行一个正整数,表示最少需要划分的段数。

Sample Input

Copy
3
5
3 4 2 1 5
5 1 4 2 3
1
1
1
10
8 10 5 3 4 1 7 9 2 6
7 9 1 2 6 5 8 10 3 4 \n
 \n
 · · · · \n
 · · · · \n
 \n
 \n
 \n
  \n
 ·  · · · · · · · · \n
 · · · · · · ·  · · \n

Sample Output

Copy
4
1
6 \n
 \n
 \n
Source: 2025“钉耙编程”中国大学生算法设计暑期联赛(5), HDU, 8035

Submit

请先 登录

© 2025 FAQs