#include<bits/stdc++.h>
using namespace std;
constexpr int N=1e4+5;
constexpr int mod=1e6+7;
#define int long long
int dp[2][N];
int v[N];
int add(int a, int b){
a+=b;
if(a>=mod)a-=mod;
return a;
}
int32_t main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>v[i];
dp[0][0]=1;
int mx=0,ok=0;
for(int i=1;i<=n;++i){
for(int j=2;j<=i;++j)
dp[i&1][j]=(dp[i+1&1][j]*j+dp[i+1&1][j-1])%mod;
if(v[i]!=1)ok=1;
dp[i&1][0]=1;
if(v[i]!=1)
dp[i&1][mx]=add(dp[i&1][mx],v[i]-1)%mod;
if(ok)dp[i&1][1]=1;
mx=max(mx,v[i]);
}
int ans=0;
for(int i=1;i<=n;++i)
ans+=dp[n&1][i];
cout<<add(ans,1)<<'\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |