제출 #484774

#제출 시각아이디문제언어결과실행 시간메모리
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...