Submission #1081558

#TimeUsernameProblemLanguageResultExecution timeMemory
1081558jk_Calvinball championship (CEOI15_teams)C++14
100 / 100
94 ms644 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...