wangmingwei
2024-11-15 08:38:17
考虑将
当
当
当
线性递推统计答案。
inline void work()
{
n = read();
a.resize(n+1);
for(int i{1};i<=n;i++) a[i] = read();
if(a[n] != n) {puts("0");return;}
for(int i{1};i<=n;i++) if(a[i] > i) {puts("0");return;}
int ans{1},k{};
for(int i{1};i<=n;i++)
{
if(a[i] - a[i-1] == 0) k++;
else if(a[i] - a[i-1] == 1) ans = ans * (2*k + 1) % MOD;
else if(a[i] - a[i-1] == 2) (ans *= k * k % MOD) %= MOD,k--;
else ans = 0;
}
writeln(ans);
}