#P15819. [2025年山东集训第三轮]象形文字

[2025年山东集训第三轮]象形文字

题目描述

观看电影是一个复杂的过程。你将可观看的电影分为两个列表:

  • 第一列表包含 nn 部电影;
  • 第二列表包含 mm 部电影。

因此,你总共有 n+mn+m 部电影可以看。每部电影的评分都是互不相同的整数,取自集合 {1,2,,n+m}\{1,2,\ldots,n+m\}

因为你不希望连续观看太多高分电影或太多低分电影,你设计了以下观看算法:

  • 每一步,你从第一列表中选取一部电影观看。之后该电影将从第一列表中消失。
  • 你必须交替选择当前可用的最高分电影和最低分电影。第一次选择必须是最高分电影。
  • 观看选中的电影后,你将从第二列表中选择另一部电影插入到第一列表的任意位置。当第二列表为空时,你将停止观看电影。注意这意味着第一列表将始终保持恰好 nn 部电影。

你希望第一列表最终按评分升序排列。由于你懒得手动处理列表,你不会直接修改列表本身。相反,在算法的每一步,你需要决定插入哪部电影以及插入的位置,以使第一列表变为有序所需的步骤数最少。

输入格式

输入的第一行包含两个整数 nnmm

第二行包含 nn 个整数:第一列表中的电影评分。

第三行包含 mm 个整数:第二列表中的电影评分。

保证第一列表和第二列表的评分的并集等于集合 {1,2,,n+m}\{1,2,\ldots,n+m\}

输出格式

输出一行,包含一个整数:使得第一列表有序所需的最少步骤数,如果不可能则输出 1-1

样例 1

样例 1 输入

5 5
3 1 5 2 4
6 8 7 9 10

样例 1 输出

4

样例 1 解释

第一步,你观看评分 55 的电影(当前最高分),然后将第二列表中的 77 插入第一列表的末尾:

  • 第一列表 =[3,1,2,4,7]=[3,1,2,4,7]
  • 第二列表 =[6,8,9,10]=[6,8,9,10]

第二步,观看最低分电影 11,插入 88 到末尾:

  • 第一列表 =[3,2,4,7,8]=[3,2,4,7,8]
  • 第二列表 =[6,9,10]=[6,9,10]

第三步,观看最高分电影 88,插入 99 到末尾:

  • 第一列表 =[3,2,4,7,9]=[3,2,4,7,9]
  • 第二列表 =[6,10]=[6,10]

第四步,观看最低分电影 22,插入 1010 到末尾:

  • 第一列表 =[3,4,7,9,10]=[3,4,7,9,10]
  • 第二列表 =[6]=[6]

此时第一列表已按升序排列。注意虽然示例中的插入操作都在末尾,但实际可以插入到任意位置。

数据范围与限制

对于所有数据,保证 1n1000001 \le n \le 1000001m2000001 \le m \le 200000

子任务编号 子任务分值 nn \le mm \le
1 15 10
2 50 100
3 200 700
4 1000 5000
5 40 100000 200000