Submission #1173778

#TimeUsernameProblemLanguageResultExecution timeMemory
1173778ezzzayCryptography (NOI20_crypto)C++20
15 / 100
180 ms26276 KiB
#include<bits/stdc++.h> using namespace std; #define ff first #define ss second #define pb push_back #define int long long const int N=4e5; int a[N]; int fct[N]; int bit[N]; const int mod=1e9+7; void update(int idx, int val){ while(idx<N){ bit[idx]+=val; idx+= idx & -idx; } } int find(int idx){ int s=0; while(idx>0){ s+=bit[idx]; idx-= -idx &idx; } return s; } signed main(){ int n; cin>>n; map<int,int>mp; for(int i=1;i<=n;i++){ cin>>a[i]; mp[a[i]]; } fct[0]=1; for(int i=1;i<=n;i++)fct[i]=(fct[i-1]*i)%mod; int id=1; for(auto it=mp.begin();it!=mp.end();it++){ it->ss= id++; } for(int i=1;i<=n;i++){ a[i]= mp[a[i]]; update(a[i],1); } int ans=0; fct[0]=0; for(int i=1;i<=n;i++){ int x= find(a[i])-1; ans+= (fct[x]* (n-i))%mod;; ans%=mod; update(a[i],-1); } cout<<(ans+1)%mod; }
#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...