国际信息学奥林匹克竞赛将要在日本召开了。为了欢迎全世界的选手们,委员会决定将从机场到宿舍沿路的大楼装饰起来。根据某著名设计师的设计,做装饰的大楼从机场到宿舍的方向必须高度严格递增。也就是说,如果做装饰的大楼从机场开始高度顺次为 h1 , h2 , h3 ,…,那么必须满足 h1 < h2 < h3 < … 。
为了使尽量多的装饰品发挥光泽,做装饰的大楼希望越多越好。担任挑选被装饰的大楼的工作的 JOI 君,考虑到了大楼的主人可能会有“希望自己的大楼被装饰起来,而且,为了让大楼很显眼,希望这栋大楼是所有装饰起来的大楼中离宿舍最近的一栋”这种无理要求。
从机场到宿舍沿路共有 N 栋大楼,从机场开始的第 i 栋大楼称作大楼 i , N 栋大楼的高度彼此不同。 JOI 君为了满足各种各样的要求,决定事先计算出“如果装饰大楼 i ,并且让大楼 i 是所有装饰起来的大楼中离宿舍最近的一栋,那么选出的大楼最多有 Ai 个”这样的东西。 JOI 君计算出了整数列 A1 , A2 ,…, AN ,然后发给了日本信息学奥林匹克竞赛委员会的 K 理事长。
然而, K 理事长收到的信息只有一个长度为 N - 1 的整数列 B1 , B2 ,…, BN−1 。 K 理事长不知道大楼高度的情报,因此没有办法计算出 Ai 。
K 理事长认为, JOI 君一定是漏写了一个数。考虑到以 A1 , A2 ,…, AN 为 A 数组的大楼的高度大小关系可能有很多种, K 理事长想知道,删掉一个数后能得到 B1 , B2 ,…, BN−1 的合法的 A 数组一共有多少种?
然而实际上, JOI 君有可能并没有漏写一个数而是出现了其他的书写事故,因此无解也是有可能的。
第一行一个正整数N,表示从机场到宿舍沿路的大楼数量。
接下来N-1行,第i行(1<=i<=N-1)为B_i,表示K理事长收到的第i个数的值。
输出一行一个正整数,表示可能的A数组的数量。
4
1
1
2
5
合法的A数组共有以下5种:
1,2,1,2,此时的高度序列为2413或3412
1,1,2,3,此时的高度序列为2134
1,1,2,1,此时的高度序列为3241
1,1,2,2,此时的高度序列为2143
1,1,1,2,此时的高度序列为3214
对于10%的数据,N<=8
对于40%的数据,N<=300
对于100%的数据:
2<=N<=10^6
1<=Bi<=N (1<=i<=N-1)
我们首先可以枚举 a 数组里丢失元素的位置 i ,我们考虑 ai 的取值范围。
设 aj (0 < j < i)的最大值为 k ,则 ai 的取值范围为1 ≤ ai ≤ k+1 .
我先把结论丢出来,接下来我们解释一下这种神奇的现象。
我们可以知道,当 hi 一定时, ai = max ( aj )+1 ( hj < hi )。
也就是说,那个 aj = k 的 aj 一定是由某个 ay +1( hy < hj 且 y < j )转移而来的,也就是指一定存在一个 ay = k -1,才会存在 aj = k 。
以此类推, 1 ~~ k 这 k 个值一定会在 a 数组中全部出现过。那么我只需要 hi 控制得当, ai 可以等于 1 ~~ k 中任何一个值+1.同时 ai 也可以等于1,这样子, ai 的取值就有( k +1)种。
现在,我们只要枚举一下 i ,统计一下答案就可以了。
如果你研究过样例,你会发现答案是7。为什么呢?
我们可以发现,有两种情况是重复的。那我们怎样去重了?
画多几次可以发现,只有以下情况会出现重复的序列
书名号内的部分即为相同部分,这时答案要-1就可以了。
然而,事实是残酷的,这一题还有一种特别坑人的特殊情况。
这种特殊情况就是,某个 ai 并不能由 aj +1转移而来。( j < i )(我们称这种情况为“断层”)
这就意味着, a 数组内丢失的元素一定为 ai -1,此时,丢失元素的值确定了,我们只需要找到它可以插入的位置的个数即可。
还有,如果出现了两个或两个以上的“断层”,那当然是无解,答案为0。