제출 #890092

#제출 시각아이디문제언어결과실행 시간메모리
890092vjudge1Cryptography (NOI20_crypto)C++14
100 / 100
79 ms15216 KiB
#include<bits/stdc++.h> using namespace std; #define int long long struct FenwickTree{ int n; vector<int> t; void init(int _n){ n=_n; t.assign(n+1, 0); } void update(int pos, int val){ for (int i=pos; i<=n; i+=i&(-i)) t[i]+=val; } int get(int pos){ int ans=0; for (int i=pos; i; i-=i&(-i)) ans+=t[i]; return ans; } } bit; const int mod=1e9+7, N=3e5+1; int n, a[N], fact[N]; pair<int, int> b[N]; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i=1; i<=n; ++i) cin >> a[i], b[i]={a[i], i}; fact[0]=1; for (int i=1; i<=n; ++i) fact[i]=fact[i-1]*i%mod; sort(b+1, b+n+1); int ans=0; for (int i=1; i<=n; ++i) a[b[i].second]=i; bit.init(n); for (int i=1; i<=n; ++i) bit.update(i, 1); for (int i=1; i<=n; ++i){ bit.update(a[i], -1); ans=(ans+fact[n-i]*bit.get(a[i]))%mod; } cout << (ans+1)%mod; 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...