Submission #1285693

#TimeUsernameProblemLanguageResultExecution timeMemory
1285693jackofall718Cryptography (NOI20_crypto)C++20
100 / 100
252 ms28616 KiB
#include <bits/stdc++.h> #include <chrono> #define ll long long int #define endl '\n' #define vn vector<ll> #define vi vector<pair <ll,ll>> using namespace std; using namespace std::chrono; const int MAX_N = 1e9 + 7; #define pii pair<ll,ll> const ll INF = 0x3f3f3f3f3f3f3f3f; #define pb push_back #define srt(vp) sort(vp.begin(), vp.end()) struct fenwick{ vn bit; ll n; fenwick(ll size){//no void here bit.assign(size+1,0); n=size;//imp for (int i = 1; i <= n; i++) update_internal(i);//imp }; void update_internal(ll i) { for (; i <= n; i += i & -i) bit[i] += 1; } void update(ll i){ for (;i<=n;i += i&-i)bit[i]-=1; } ll query(ll i){ ll res = 0; for (;i>0;i-= i&-i)res += bit[i]; return res; } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); auto start = high_resolution_clock::now(); ll n; cin>>n; vn v(n); for (auto &x:v)cin>>x; vn arr = v; vn exp (n+1); exp[0]=1; for (int i=1;i<=n;i++){ exp[i]=(exp[i-1]*i)%MAX_N; } sort(arr.begin(),arr.end()); arr.erase(unique(arr.begin(),arr.end()),arr.end()); map <ll,ll> pos; for (int i=0;i<arr.size();i++){ pos[arr[i]]=i+1; } for(int i=0;i<n;i++){ v[i]=pos[v[i]]; } fenwick tree(arr.size()); ll ans = 0; for (int i=0;i<n;i++){ ll index = i+1; ll base = tree.query(v[i]-1); ll other = exp[n-index]; if (base)ans = (ans + (base * other) % MAX_N) % MAX_N; tree.update(v[i]); } cout << (ans + 1) % MAX_N;//imp auto stop = high_resolution_clock::now(); auto duration = duration_cast<microseconds>(stop - start); //cout << "Time taken by function: " << duration.count() << " microseconds" << 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...