이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int mod=1000007;
int main() {
int n; cin >> n;
vector<int> v;
copy_n(istream_iterator<int>(cin), n, back_inserter(v));
vector<int> prefixmax(n);
partial_sum(v.begin(), v.end(), prefixmax.begin(), [](int a, int b) { return max(a, b); });
int64_t ans = 1;
array<vector<int>, 2> dp;
dp[0].assign(n, 1);
dp[1].assign(n, 1);
for (int i = n-1; i >= 1; --i) {
if (i==n-1) {
dp[0].assign(n, 1);
} else {
auto& dp0 = dp[(n-i-1)%2];
auto& dp1 = dp[(n-i)%2];
for (int k = 1; k <= i; ++k)
dp0[k] = (k*(int64_t)dp1[k] + dp1[k+1])%mod;
}
ans = (ans + (v[i]-1)*(int64_t)dp[(n-i-1)%2][prefixmax[i-1]])%mod;
}
cout << ans << '\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... |