思路:
首先ai是不减的,于是我们发现一个性质,当i>j时,i能到达的点j也能到达
于是我们就考虑已经构造出了前i格,那第i+1格可以填i+1,也可以ai在继续填,所以我们从ai到i之间插入都是合法的
所以答案就是(i-ai+1)的乘积
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
long long n, x, ans=1;
int main()
{
scanf("%lld", &n);
for(int i=1; i<=n; i++)
scanf("%lld", &x), ans=ans*(i-x+1)%1000000007;
printf("%lld", ans);
return 0;
}