Submission #484774

#TimeUsernameProblemLanguageResultExecution timeMemory
484774VictorCalvinball championship (CEOI15_teams)C++17
100 / 100
346 ms1000 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = (a); i < (b); ++i) #define per(i, a, b) for (int i = (b - 1); i >= (a); --i) #define trav(a, x) for (auto &a : x) #define all(x) x.begin(), x.end() #define sz(x) x.size() #define pb push_back #define debug(x) cout<<#x<<" = "<<x<<endl #define umap unordered_map #define uset unordered_set typedef pair<int, int> ii; typedef pair<int, ii> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<vi> vvi; typedef long long ll; typedef pair<ll,ll> pll; typedef vector<ll> vll; typedef vector<pll> vpll; const int INF = 1000007; int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int n,arr[10001]; set<ii>vals; cin>>n; rep(i,1,n+1){ cin>>arr[i]; vals.emplace(arr[i],i); } ll ans=1; vll dp(n+1,1),dp2(n+1,0); per(i,2,n+1){ vals.erase({arr[i],i}); int mx=(--vals.end())->first; rep(j,1,n+1){ if(1<j)dp2[j-1]=(dp2[j-1]+dp[j])%INF; if(j<i)dp2[j]=(dp2[j]+dp[j]*ll(j))%INF; } ans=(ans+dp[mx]*(arr[i]-1))%INF; dp.swap(dp2); dp2.assign(n+1,0); } cout<<ans<<endl; 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...