This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cmath>
using namespace std;
using ll = long long;
#define MIN(a, b) (((a) < (b)) ? (a) ? (b))
#define MAX(a, b) (((a) < (b)) ? (b) : (a))
int const nmax = 10000;
int const modulo = 1000007;
int v[5 + nmax], pref[5 + nmax];
int dp[5 + nmax];
int main()
{
int n;
cin >> n;
for(int i = 1;i <= n; i++) {
cin >> v[i];
pref[i] = max(pref[i - 1], v[i]);
}
for(int i = 0; i <= n; i++)
dp[i] = 1;
ll result = 0;
for(int i = n; 1 <= i; i--){
for(int j = 1; j < v[i]; j++) {
result += dp[pref[i - 1]];
if(modulo <= result)
result -= modulo;
}
for(int j = 0; j <= n; j++)
dp[j] = (1LL * dp[j] * j + dp[j + 1]) % modulo;
}
cout << (result + 1) % modulo;
return 0;
}
# | 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... |