#P16039. [CSPro 22] 校门外的树

[CSPro 22] 校门外的树

题目背景

洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:https://www.cspro.org/

题目描述

X 校最近打算美化一下校园环境。前段时间因为修地铁,X 校大门外种的行道树全部都被移走了。现在 X 校打算重新再种一些树,为校园增添一抹绿意。

X 校大门外的道路是东西走向的,我们可以将其看成一条数轴。在这条数轴上有 nn 个障碍物,例如电线杆之类的。虽然障碍物会影响树的生长,但是障碍物不一定能被随便移走,所以 X 校规定在障碍物的位置上不能种树。nn 个障碍物的坐标都是整数;如果规定向东为正方向,则 nn 个障碍物的坐标按照从西到东的顺序分别为 a1,a2,,ana_1, a_2, \cdots, a_n。X 校打算在 [a1,an][a_1, a_n] 之间种一些树,使得这些树看起来比较美观。

X 校希望,在一定范围内,树应该是等间隔的。更具体地说,如果把 [a1,an)[a_1, a_n) 划分成一些区间 [ap1,ap2)[a_{p_1}, a_{p_2}), \cdots, [apm1,apm)[a_{p_{m-1}}, a_{p_m})1=p1<p2<<pm=n1 = p_1 < p_2 < \cdots < p_m = n),那么每个区间 [api,api+1)[a_{p_i}, a_{p_{i+1}}) 内需要至少种一棵树,且该区间内种的树的坐标连同区间端点 api,api+1a_{p_i}, a_{p_{i+1}} 应该构成一个等差数列。不同区间的公差,也就是树的间隔可以不相同。

例如,如果障碍物位于 0,2,60, 2, 6 这三处,那么我们可以选择在 [0,2)[0, 2)[2,6)[2, 6) 分别种树,也可以选择在 [0,6)[0, 6) 等间隔种树。如果是分别在 [0,2)[0, 2)[2,6)[2, 6) 种树,由于每个区间内至少要种一棵树,坐标 11 上必须种树;而 [2,6)[2, 6) 上的树可以按照 11 的间隔种下,也可以按照 22 的间隔种下。下图表示了这两种美观的种树方案,其中橙色的圆表示障碍物,绿色的圆表示需要在这个位置种树,箭头上的数字表示种下这棵树时对应的间隔为多少。

:::align{center} :::

而如果选择在 [0,6)[0, 6) 区间等间隔种树,我们只能以 33 的间隔种树,因为无论是选择间隔 11 或者间隔 22,都需要在坐标 22 上种树,而这个位置已经有障碍物了。下图分别表示了间隔为 3,2,13, 2, 1 时的种树情况,红色箭头表示不能在这里种树。

:::align{center} :::

一般地,给定一个区间 [al,ar)[a_l, a_r),对于树的坐标的集合 T(al,ar)T \subset (a_l, a_r)TZT \subset \mathbb{Z}),归纳定义 TT[al,ar)[a_l, a_r) 上是美观的:

  1. 如果 TT \neq \varnothingT{al,al+1,,ar}=T \cap \{a_l, a_{l+1}, \cdots, a_r\} = \varnothing,并且存在一个公差 d1d \geq 1,使得 T{al,ar}T \cup \{a_l, a_r\} 中的元素按照从小到大的顺序排序后,可以构成一个公差为 dd 的等差数列(显然,这个等差数列的首项为 ala_l,末项为 ara_r),则 TT[al,ar)[a_l, a_r) 上是美观的;
  2. 如果 T{al,al+1,,ar}=T \cap \{a_l, a_{l+1}, \cdots, a_r\} = \varnothing,并且存在一个下标 mml<m<rl < m < r),使得 T(al,am)T \cap (a_l, a_m)[al,am)[a_l, a_m) 上是美观的,且 T(am,ar)T \cap (a_m, a_r)[am,ar)[a_m, a_r) 上是美观的,则 TT[al,ar)[a_l, a_r) 上是美观的。

根据这一定义,空集在任意区间上都不是美观的;另外,如果存在下标 ii 使得 aiTa_i \in T,那么 TT 一定不是美观的。

我们称两种种树的方案是本质不同的,当且仅当两种方案中,种树的坐标集合不同。请帮助 X 校对 [a1,an)[a_1, a_n) 求出所有本质不同的美观的种树方案。当然,由于方案可能很多,你只需要输出总方案数对 109+710^9 + 7 取模的结果。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 nn,表示障碍物的数量。

输入的第二行包括 nn 个非负整数 a1,,ana_1, \cdots, a_n,表示每个障碍物的坐标。

保证对 i=1,2,,n1i = 1, 2, \cdots, n - 1ai<ai+1a_i < a_{i+1}

输出格式

输出到标准输出。

输出一个非负整数,表示本质不同的美观的种树方案的数量对 109+710^9 + 7 取模的结果。

3
0 2 6
3
11
0 10 20 30 40 50 60 70 80 90 100
256507

提示

样例 1 解释

这组样例即为题面描述中提到的那组。

样例 3

见题目目录下的 3.in 与 3.ans。

子任务

对于 10%10\% 的数据,保证 n=2n = 2

对于 30%30\% 的数据,保证 n10n \leq 10

对于 60%60\% 的数据,保证 n100n \leq 100, ai1000a_i \leq 1000

对于 100%100\% 的数据,保证 2n10002 \leq n \leq 1000, 0ai100,0000 \leq a_i \leq 100,000,且至少存在一种美观的种树方案。