P9330 [JOIST 2023] JOI 国的节日 2 / Festivals in JOI Kingdom 2
题目描述
在 JOI 王国,每年都会举行一次全国性的节日。在节日期间,总共有 $N$ 个活动。每个活动的时间表已经固定。$N$ 个活动的时间表由长度为 $N$ 的序列 $a, b$ 描述,满足以下条件:
- 从 $1$ 到 $2N$ 之间的每个整数都出现在 $a$ 或 $b$ 中。
- $a_i < b_i \ (1 \le i \le N)$。
- $a_i < a_{i + 1} \ (1 \le i \le N - 1)$。
第 $i$ 个活动将在节日开始后的 $a_i$ 分钟开始,并在节日开始后的 $b_i$ 分钟结束。
节日的参与者可以选择参加任意活动。然而,不允许参加时间表重叠的两个活动。(注意,活动的开始时间和结束时间彼此不同。)
JOI-kun 想参加尽可能多的活动。直到去年,他通过计算机使用以下程序选择参加的活动:
> 对于 $i = 1, 2, \dots, N$,按以下顺序进行。
> > 如果第 $i$ 个活动的时间表与他已经选择参加的其他活动的时间表不重叠,他将参加第 $i$ 个活动。否则,他将不参加第 $i$ 个活动。
然而,在学习了计算机科学之后,JOI-kun 注意到上述算法并不一定能最大化他参加的活动数量。从今年开始,JOI-kun 将使用改进的算法。使用改进的算法,JOI-kun 将能够最大化他参加的活动数量。
JOI-kun 想知道使用改进算法时,产生更多活动数量的情况数。
编写一个程序,给定整数 $N$ 和一个大质数 $P$,计算出描述 $N$ 个活动时间表的序列 $a, b$ 的对数,其中改进的算法产生更多的活动数量。由于答案可能非常大,程序应输出答案除以 $P$ 的余数。
输入格式
从标准输入读取以下数据。
> $N \ P$
输出格式
向标准输出写入一行。输出应包含答案的余数,即描述 $N$ 个活动时间表的序列 $a, b$ 的对数,其中改进的算法产生更多的活动数量,除以 $P$ 的余数。
说明/提示
**【样例解释 #1】**
例如,考虑 $a = (1, 2, 4)$ 和 $b = (6, 3, 5)$ 的情况。如果 JOI-kun 使用去年使用的算法,他将只参加第一个活动。另一方面,如果他使用正确的算法来最大化活动数量,他将参加第二个和第三个活动。因此,他将参加两个活动。在这种情况下,改进的算法产生了更多的活动数量。
以下是改进的算法产生更多活动数量的序列对 $a, b$:
- $a = (1, 2, 4), b = (6, 3, 5)$
- $a = (1, 2, 4), b = (5, 3, 6)$
因此,输出 $2$,这是 $2$ 除以 $100000007$ 的余数。
该样例满足所有子任务的限制。
**【样例解释 #2】**
有 $28$ 对序列 $a, b$ 满足条件。因此,输出 $28$,这是 $28$ 除以 $100000007$ 的余数。
该样例满足所有子任务的限制。
**【样例解释 #3】**
有 $5295044602247148$ 对序列 $a, b$ 满足条件。因此,输出 $935834920$,这是 $5295044602247148$ 除以 $999999937$ 的余数。
该样例满足子任务 $3 \sim 6$ 的限制。
**【数据范围】**
对于所有测试数据,满足 $1 \le N \le 2 \times 10 ^ 4$,$10 ^ 8 < P < 10 ^ 9$,保证 $P$ 是质数,保证所有输入均为整数。
|子任务编号|分值|$N \le$|
|:-:|:-:|:-:|
|$1$|$5$|$5$|
|$2$|$5$|$8$|
|$3$|$27$|$30$|
|$4$|$14$|$300$|
|$5$|$36$|$3000$|
|$6$|$13$|$2 \times 10 ^ 4$|
题面翻译由 ChatGPT-4o 提供。