Submission #496695

#TimeUsernameProblemLanguageResultExecution timeMemory
496695aryan12Calvinball championship (CEOI15_teams)C++17
100 / 100
486 ms656 KiB
#include <bits/stdc++.h> using namespace std; #define int long long mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count()); const int MOD = 1e6 + 7; void Solve() { int n; cin >> n; int a[n + 1], mx[n + 1]; mx[0] = 0; for(int i = 1; i <= n; i++) { cin >> a[i]; mx[i] = max(mx[i - 1], a[i]); } int dp[2][n + 5]; for(int i = 0; i <= n + 4; i++) { dp[0][i] = 1; } int ans = 1; for(int i = n - 1; i > 0; i--) { int cur = (n - i) % 2, prev = 1 - cur; for(int j = 1; j <= n; j++) { int x = (dp[prev][j] * j) % MOD; x += dp[prev][j + 1]; x %= MOD; dp[cur][j] = x; } for(int j = a[i] - 1; j > 0; j--) { int temp = max(mx[i - 1], j); ans += dp[cur][temp]; ans %= MOD; } } cout << (ans + a[n] - 1) % MOD << "\n"; } int32_t main() { auto begin = std::chrono::high_resolution_clock::now(); ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; while(t--) { Solve(); } auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; return 0; }
#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...