QOJ.ac

QOJ

Límite de tiempo: 20 s Límite de memoria: 256 MB Puntuación total: 100

#269. 成绩

Estadísticas

体育老师班上有 $n$ 名学生。学年即将结束,是时候给学生们打最终成绩了。为此,老师给每名学生分配了一个 $1$ 到 $n$ 之间的运动指数 $a_i$,反映他们的运动能力。在每节课开始时,学生们排成一列。老师按从左到右的顺序给出成绩。每个成绩可以是 $1$ 到 $n$ 之间的任意整数。(是的,每名学生都有可能获得唯一的成绩!)

然而,老师希望成绩满足以下条件: 对于任意两名学生 $v$ 和 $u$,如果 $v$ 的运动指数大于 $u$ 的运动指数,那么 $v$ 的成绩不能低于(差于)$u$ 的成绩,因为这显然是不公平的。 对于任意两名学生 $v$ 和 $u$,如果 $v$ 在队列中排在 $u$ 之后(即被评分的时间更晚),那么 $v$ 的成绩必须低于(差于)$u$ 的成绩,因为这会让 $v$ 感到非常难过。 * 老师希望在遵守上述规则的前提下,最大化他们给出的不同成绩的数量。

每次上课时,学生们都会排成一个有序的队列,老师习惯于某种特定的顺序。但在学生的请求下,老师同意在连续的课程之间,两名学生可以交换在队列中的位置。老师还没有决定何时给出最终成绩。请编写一个程序,确定在学期结束前的每一节课中,如果老师决定在那时给所有学生打最终成绩,他最多能给出多少种不同的成绩。

输入格式

输入的第一行包含两个正整数 $n$ 和 $z$,分别表示学生人数和即将进行的课程节数。

第二行包含一个由 $n$ 个整数 $a_1, a_2, \dots, a_n$ ($1 \le a_i \le n$) 组成的序列,指定了老师偏好的顺序下(即剩余课程的第一节课时)学生们的运动指数。这些指数互不相同,因此构成了 $1, 2, \dots, n$ 的一个排列。因此,我们可以通过运动指数来标识一名学生。

接下来的 $z-1$ 行描述了交换操作。具体来说,第 $i$ 行包含两个整数 $p_i$ 和 $q_i$ ($1 \le p_i < q_i \le n$),表示在第 $i$ 节课期间位于队列中第 $p_i$ 位和第 $q_i$ 位的学生将在下一节课前交换位置。

输出格式

输出共 $z$ 行。第 $i$ 行的数字应对应老师在第 $i$ 节课期间可以给出的不同成绩的最大数量。

样例

样例输入 1

3 4
1 2 3
1 3
1 2
2 3

样例输出 1

3
1
1
2

说明

样例说明:在第一节课中,学生的顺序是 $1, 2, 3$,因此他们每个人都可以获得不同的成绩。在第二节课中,顺序是 $3, 2, 1$,在第三节课中是 $2, 3, 1$。在这两种顺序下,学生 $1$ 的运动指数最小,因此他不能获得比其他人更好的成绩。同时,由于他是最后被评分的,他也不能获得比其他人更差的成绩。最后,在最后一节课中,学生的顺序是 $2, 1, 3$。此时,学生 $3$ 可以获得比学生 $1$ 和 $2$ 更好的成绩,而学生 $1$ 和 $2$ 必须获得相同的成绩。

子任务

测试集由以下子任务组成。每个子任务内可能包含多个测试组。

子任务 数据范围 分值
1 $n, z \le 2000$ 24
2 $n \le 2000, z \le 300\,000$ 8
3 $n, z \le 100\,000$ 30
4 $n \le 1\,000\,000, z \le 300\,000$,老师给出的不同成绩数不超过 $15$ 10
5 $n \le 1\,000\,000, z \le 300\,000$,学生仅与队列中的前驱或后继交换位置 20
6 $n \le 1\,000\,000, z \le 300\,000$ 8

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.