E. [R40E]Yet another counting problem

    Type: Default 1000ms 512MiB

[R40E]Yet another counting problem

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

时空限制

1s/512M

题目描述

给定两个大小均为 nn 的点集 AABB,集合中的点编号均为 11nn

这两个集合之间的连边规则如下: 对于集合 BB 中的第 ii 个点 BiB_i,它只能与集合 AA 中编号在前 aia_i 个的点(即 A1,A2,,AaiA_1, A_2, \dots, A_{a_i})建立连接。

我们需要在 AABB 之间选择若干条边组成一个匹配,要求 AABB 中的每个点最多只能被一条边连接。

在此基础上,我们定义一个匹配是极大匹配,当且仅当它满足以下条件:

  1. 该匹配本身是合法的。
  2. 无法再从剩余未匹配的点中找到一对 (Bi,Aj)(B_i, A_j),使得它们之间存在连边规则允许的边。

换句话说,对于任意一个未被匹配的 BiB_i,它所有能连接的 AA 类节点(A1AaiA_1 \dots A_{a_i})都必须已经被匹配。

请统计有多少种不同的极大匹配方案。由于答案可能很大,请输出结果对 109+710^9 + 7 取模后的值。

格式

输入格式

第一行包含一个正整数 nn,表示集合的大小。

第二行包含 nn 个正整数 a1,a2,,ana_1, a_2, \dots, a_n,其中 aia_i 表示点 BiB_i 可以连接的 AA 类点的范围是 [1,ai][1, a_i]

输出格式

输出一个整数,表示极大匹配的方案数对 109+710^9 + 7 取模的结果。

样例

样例输入 #1

3
3 1 1

样例输出 #1

5

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 nn \le
11 1010 88
22 4040 400400
33 5050 30003000

对于 100%100\% 的数据,1n30001 \le n \le 30000ain0 \le a_i \le n

代码源挑战赛 Round 40

Not Attended
Status
Done
Rule
DMY
Start at
2025-12-5 20:00
End at
2025-12-5 21:30
Duration
1.5 hour(s)
Host
Partic.
443