luogu#P16703. [SEATST 2026] 两场考试 / Two Exams

[SEATST 2026] 两场考试 / Two Exams

题目描述

班级里有 NN 名学生。每名学生根据当前的班级排名被分配了一个从 00N1N - 1 的编号。也就是说,学生 ii (对于所有 0iN10 \le i \le N - 1 )当前的班级排名为 ii 。在这里,排名 00 是最好的,而排名 N1N - 1 是最差的。

班上最近考完中文和数学考试。学生 ii (对于所有 0iN10 \le i \le N - 1 )在中文考试中排名 A[i]A[i] ,而在数学考试中排名 B[i]B[i]AABB 均是长度为 NN 的排列。

:::info[什么是长度为 NN 的排列?]{open} 在本题中,长度为 NN 的排列 PP 是一个长度为 NN 的数组,满足对于所有 0iN10 \le i \le N - 10P[i]N10 \le P[i] \le N - 1 ,且对于所有 0i<jN10 \le i < j \le N - 1P[i]P[j]P[i] \ne P[j]

例如, [2,1,0][2, 1, 0] 是一个长度为 33 的排列,但 [1,2,3][1, 2, 3][2,0,2][2, 0, 2] 不是长度为 33 的排列。 :::

老师想对所有学生进行重新排名。新的排名可以用一个排列 PP 来表示。

对于每位学生 ii ,新的班级排名必须满足至少以下一个条件:

  • 对于所有满足 P[j]<P[i]P[j] < P[i]jj ,学生 jj 的中文成绩好于学生 ii (即 A[j]<A[i]A[j] < A[i] ),或
  • 对于所有满足 P[j]<P[i]P[j] < P[i]jj ,学生 jj 的数学成绩好于学生 ii (即 B[j]<B[i]B[j] < B[i] )。

:::warning[警告]{open} 该条件仅适用于满足 P[j]<P[i]P[j] < P[i]jj 。对于满足 P[j]P[i]P[j] \ge P[i]jj 则没有任何限制。

对于每位学生 ii ,在评估其是否满足条件时,必须首先选择一门学科,然后用该学科与所有对应的学生 jj 进行比较。对于同一个 ii ,所有不同的 jj 必须在同一门学科上优于学生 ii 。你不能在为学生 ii 评估条件时中途切换学科。 :::

新班级排名的不满意度定义为所有学生中排名下降的最大幅度。换句话说,不满意度即为 P[i]iP[i] - i (对于所有 0iN10 \le i \le N - 1 )的最大值。

:::warning[警告]{open}

不满意度是 P[i]iP[i] - i 的最大值, iP[i]i - P[i] 的值不会影响不满意度的计算。 :::

在所有可能的新排名中,请找出最小可能的不满意度

实现详情

你需要实现以下函数:

int minimum_dissatisfaction(int N, std::vector<int> A, std::vector<int> B)
  • NN :学生人数。
  • AA :一个长度为 NN 的数组,表示中文考试的排名。
  • BB :一个长度为 NN 的数组,表示数学考试的排名。
  • 此函数应返回新班级排名的最小不满意度。
  • 此函数在每个测试数据中恰好被调用一次。

输入格式

N
A[0] A[1] ... A[N - 1]
B[0] B[1] ... B[N - 1]

输出格式

一个整数,表示 minimum_dissatisfaction 的返回值。

提示

样例

考虑以下函数调用:

minimum_dissatisfaction(5, [3, 0, 4, 1, 2], [0, 3, 2, 4, 1])

在这个例子中,一种分配新排名的方式是 P=[0,2,3,4,1]P = [0, 2, 3, 4, 1]

考虑学生 11 ,其 P[1]=2P[1] = 2 。所有满足 P[j]<P[1]P[j] < P[1] 的学生 jj 在数学上的排名都比学生 11 好,因此该学生满足班级排名条件。

接下来考虑学生 22 ,其 P[2]=3P[2] = 3 。所有满足 P[j]<P[2]P[j] < P[2] 的学生 jj 在中文上的排名都比学生 22 好,因此该学生也满足班级排名条件。

可以验证,所有其他学生同样满足班级排名条件。

这个新排名的不满意度为 11 。不存在不满意度更低的其他新排名方案,因此该函数应返回 11

约束

  • 1N5 000 0001 \le N \le 5\ 000\ 000
  • 对于所有 0iN10 \le i \le N - 10A[i],B[i]N10 \le A[i], B[i] \le N - 1
  • 对于所有 0i<jN10 \le i < j \le N - 1A[i]A[j]A[i] \ne A[j]
  • 对于所有 0i<jN10 \le i < j \le N - 1B[i]B[j]B[i] \ne B[j]

子任务

  1. 33 分) N8N \le 8
  2. 44 分) N20N \le 20
  3. 1313 分) N500N \le 500
  4. 1212 分) N3000N \le 3000 ,且对于所有 0iN10 \le i \le N - 1A[i]+B[i]=N1A[i] + B[i] = N - 1
  5. 1919 分) N3000N \le 3000
  6. 1515 分) N100 000N \le 100\ 000 ,且对于所有 0iN10 \le i \le N - 1A[i]+B[i]=N1A[i] + B[i] = N - 1
  7. 1717 分) N100 000N \le 100\ 000
  8. 1717 分)没有额外的约束。

:对于子任务 88 ,仅评测程序就保证会占用 30003000 毫秒时间限制中的 15001500 毫秒。