Submission #493548

#TimeUsernameProblemLanguageResultExecution timeMemory
493548dooompyCryptography (NOI20_crypto)C++17
100 / 100
113 ms9160 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; const ll MOD = 1000000007; int v[300005], p[300005]; ll fact[300005] = {1}; int bit[300005]; void add(int p) { for (; p < 300005; p += (p&(-p))) { bit[p]++; } } int sum(int p) { int s = 0; for (; p; p -= (p&(-p))) { s += bit[p]; } return s; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("", "r", stdin); // freopen("", "w", stdout); int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> v[i]; p[i] = v[i]; fact[i] = (i*fact[i-1]) % MOD; } sort(p+1, p+n+1); ll ans = 0; for (int i = 1; i <= n; i++) { int pos = lower_bound(p+1, p+n+1, v[i]) - p; ans += (fact[n-i] * (pos-1-sum(pos))); ans %= (ll)(1e9 + 7); add(pos); } cout << (ans + 1) % (ll) ( 1e9 + 7); }
#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...