Submission #1368641

#TimeUsernameProblemLanguageResultExecution timeMemory
1368641wynCryptography (NOI20_crypto)C++17
14 / 100
1096 ms7392 KiB
#include <bits/stdc++.h>
using namespace std;

int64_t N;
vector<int64_t> P;


/*
int64_t fact(int64_t n){
    int64_t ans = 1;
    for( auto i=2 ; i<=n ; i++ ){
        ans = ans*i % 1000000007;
    }
    return ans;
}
*/

vector<int64_t> fact;


int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin>>N;
    P.assign( N, 0 );
    for ( auto &p : P )
        cin >> p;

    fact = {1};
    fact.reserve(N);
    for( int i=1 ; i<=3e5 ; i++ ){
        fact.push_back(fact.back()*i);
    }
    // for( int64_t i=0 ; i<=5 ; i++ ){
    //     cout << i << setw(5) << fact[i] << endl;
    // }

    int64_t ans = 1;
    for( int64_t i=0 ; i<N ; i++ ){
        int64_t smaller=0;
        for( int64_t j=i+1 ; j<N ; j++ ){
            if( P[j] < P[i] )
                smaller++;
        }

        ans += smaller*fact[N-i-1];
        ans %= 1000000007;
    }
    cout << ans << endl;

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...